[email protected] | fc29bc70 | 2010-06-04 16:13:51 | [diff] [blame] | 1 | // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
license.bot | bf09a50 | 2008-08-24 00:55:55 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 4 | |
[email protected] | 02b2eeb | 2008-11-18 19:08:18 | [diff] [blame] | 5 | #ifndef BASE_SCOPED_HANDLE_H_ |
6 | #define BASE_SCOPED_HANDLE_H_ | ||||
[email protected] | 32b76ef | 2010-07-26 23:08:24 | [diff] [blame] | 7 | #pragma once |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 8 | |
[email protected] | 9f0ba44a | 2008-12-23 21:33:27 | [diff] [blame] | 9 | #include <stdio.h> |
10 | |||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 11 | #include "base/basictypes.h" |
12 | |||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 13 | #if defined(OS_WIN) |
14 | #include "base/scoped_handle_win.h" | ||||
15 | #endif | ||||
16 | |||||
17 | class ScopedStdioHandle { | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 18 | public: |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 19 | ScopedStdioHandle() |
20 | : handle_(NULL) { } | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 21 | |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 22 | explicit ScopedStdioHandle(FILE* handle) |
23 | : handle_(handle) { } | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 24 | |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 25 | ~ScopedStdioHandle() { |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 26 | Close(); |
27 | } | ||||
28 | |||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 29 | void Close() { |
30 | if (handle_) { | ||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 31 | fclose(handle_); |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 32 | handle_ = NULL; |
33 | } | ||||
34 | } | ||||
35 | |||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 36 | FILE* get() const { return handle_; } |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 37 | |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 38 | FILE* Take() { |
39 | FILE* temp = handle_; | ||||
40 | handle_ = NULL; | ||||
41 | return temp; | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 42 | } |
43 | |||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 44 | void Set(FILE* newhandle) { |
[email protected] | edf2446e7 | 2008-09-22 22:40:21 | [diff] [blame] | 45 | Close(); |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 46 | handle_ = newhandle; |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 47 | } |
48 | |||||
49 | private: | ||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 50 | FILE* handle_; |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 51 | |
[email protected] | fc29bc70 | 2010-06-04 16:13:51 | [diff] [blame] | 52 | DISALLOW_COPY_AND_ASSIGN(ScopedStdioHandle); |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 53 | }; |
54 | |||||
[email protected] | 2fdc86a | 2010-01-26 23:08:02 | [diff] [blame] | 55 | #endif // BASE_SCOPED_HANDLE_H_ |