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