diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-12-22 10:24:55 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-12-22 10:24:55 +0000 |
commit | 55cf0a6dc90bf0b9e57cbbad4e925ec1b14af7f9 (patch) | |
tree | 8d5a0a880161fad8ec3ff43dd0ef111d2043fa3f /lib/Debugger/FDHandle.h | |
parent | 772192cf36edeaed9366382914f820e1d81c605a (diff) |
For PR351:
FDHandle class (non-portable) moved here from lib/Support/FileUtilities
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19107 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Debugger/FDHandle.h')
-rw-r--r-- | lib/Debugger/FDHandle.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/Debugger/FDHandle.h b/lib/Debugger/FDHandle.h new file mode 100644 index 0000000000..cf95874410 --- /dev/null +++ b/lib/Debugger/FDHandle.h @@ -0,0 +1,62 @@ +//===- 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 |