[email protected] | b90d7e80 | 2011-01-09 16:32:20 | [diff] [blame] | 1 | // Copyright (c) 2011 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] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 5 | #ifndef BASE_MEMORY_SCOPED_HANDLE_H_ |
6 | #define BASE_MEMORY_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 | class ScopedStdioHandle { |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 14 | public: |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 15 | ScopedStdioHandle() |
16 | : handle_(NULL) { } | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 17 | |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 18 | explicit ScopedStdioHandle(FILE* handle) |
19 | : handle_(handle) { } | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 20 | |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 21 | ~ScopedStdioHandle() { |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 22 | Close(); |
23 | } | ||||
24 | |||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 25 | void Close() { |
26 | if (handle_) { | ||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 27 | fclose(handle_); |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 28 | handle_ = NULL; |
29 | } | ||||
30 | } | ||||
31 | |||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 32 | FILE* get() const { return handle_; } |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 33 | |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 34 | FILE* Take() { |
35 | FILE* temp = handle_; | ||||
36 | handle_ = NULL; | ||||
37 | return temp; | ||||
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 38 | } |
39 | |||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 40 | void Set(FILE* newhandle) { |
[email protected] | edf2446e7 | 2008-09-22 22:40:21 | [diff] [blame] | 41 | Close(); |
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 42 | handle_ = newhandle; |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 43 | } |
44 | |||||
45 | private: | ||||
[email protected] | 717a63d0 | 2008-11-18 17:47:08 | [diff] [blame] | 46 | FILE* handle_; |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 47 | |
[email protected] | fc29bc70 | 2010-06-04 16:13:51 | [diff] [blame] | 48 | DISALLOW_COPY_AND_ASSIGN(ScopedStdioHandle); |
initial.commit | d7cae12 | 2008-07-26 21:49:38 | [diff] [blame] | 49 | }; |
50 | |||||
[email protected] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 51 | #endif // BASE_MEMORY_SCOPED_HANDLE_H_ |