| //===- lib/Debugger/FDHandle.h - File Descriptor Handle ---------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by the LLVM research group and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines a family of utility functions which are useful for doing |
| // various things with files. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LIB_DEBUGGER_FDHANDLE_H |
| #define LIB_DEBUGGER_FDHANDLE_H |
| |
| #include "llvm/System/Path.h" |
| |
| namespace llvm { |
| |
| /// FDHandle - Simple handle class to make sure a file descriptor gets closed |
| /// when the object is destroyed. This handle acts similarly to an |
| /// std::auto_ptr, in that the copy constructor and assignment operators |
| /// transfer ownership of the handle. This means that FDHandle's do not have |
| /// value semantics. |
| /// |
| class FDHandle { |
| int FD; |
| public: |
| FDHandle() : FD(-1) {} |
| FDHandle(int fd) : FD(fd) {} |
| FDHandle(FDHandle &RHS) : FD(RHS.FD) { |
| RHS.FD = -1; // Transfer ownership |
| } |
| |
| ~FDHandle() throw(); |
| |
| /// get - Get the current file descriptor, without releasing ownership of it. |
| int get() const { return FD; } |
| operator int() const { return FD; } |
| |
| FDHandle &operator=(int fd) throw(); |
| |
| FDHandle &operator=(FDHandle &RHS) { |
| int fd = RHS.FD; |
| RHS.FD = -1; // Transfer ownership |
| return operator=(fd); |
| } |
| |
| /// release - Take ownership of the file descriptor away from the FDHandle |
| /// object, so that the file is not closed when the FDHandle is destroyed. |
| int release() { |
| int Ret = FD; |
| FD = -1; |
| return Ret; |
| } |
| }; |
| |
| } // End llvm namespace |
| |
| #endif |