1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_MEMORY_SCOPED_HANDLE_H_ 6 #define BASE_MEMORY_SCOPED_HANDLE_H_ 7 8 #include <stdio.h> 9 10 #include "base/basictypes.h" 11 12 class ScopedStdioHandle { 13 public: 14 ScopedStdioHandle() 15 : handle_(NULL) { } 16 17 explicit ScopedStdioHandle(FILE* handle) 18 : handle_(handle) { } 19 20 ~ScopedStdioHandle() { 21 Close(); 22 } 23 24 void Close() { 25 if (handle_) { 26 fclose(handle_); 27 handle_ = NULL; 28 } 29 } 30 31 FILE* get() const { return handle_; } 32 33 FILE* Take() { 34 FILE* temp = handle_; 35 handle_ = NULL; 36 return temp; 37 } 38 39 void Set(FILE* newhandle) { 40 Close(); 41 handle_ = newhandle; 42 } 43 44 private: 45 FILE* handle_; 46 47 DISALLOW_COPY_AND_ASSIGN(ScopedStdioHandle); 48 }; 49 50 #endif // BASE_MEMORY_SCOPED_HANDLE_H_ 51