• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #pragma once
8 
9 #include <stdio.h>
10 
11 #include "base/basictypes.h"
12 
13 class ScopedStdioHandle {
14  public:
ScopedStdioHandle()15   ScopedStdioHandle()
16       : handle_(NULL) { }
17 
ScopedStdioHandle(FILE * handle)18   explicit ScopedStdioHandle(FILE* handle)
19       : handle_(handle) { }
20 
~ScopedStdioHandle()21   ~ScopedStdioHandle() {
22     Close();
23   }
24 
Close()25   void Close() {
26     if (handle_) {
27       fclose(handle_);
28       handle_ = NULL;
29     }
30   }
31 
get()32   FILE* get() const { return handle_; }
33 
Take()34   FILE* Take() {
35     FILE* temp = handle_;
36     handle_ = NULL;
37     return temp;
38   }
39 
Set(FILE * newhandle)40   void Set(FILE* newhandle) {
41     Close();
42     handle_ = newhandle;
43   }
44 
45  private:
46   FILE* handle_;
47 
48   DISALLOW_COPY_AND_ASSIGN(ScopedStdioHandle);
49 };
50 
51 #endif  // BASE_MEMORY_SCOPED_HANDLE_H_
52