Home | History | Annotate | Download | only in memory
      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