diff options
Diffstat (limited to 'lib/Debugger')
-rw-r--r-- | lib/Debugger/FDHandle.cpp | 34 | ||||
-rw-r--r-- | lib/Debugger/FDHandle.h | 62 |
2 files changed, 96 insertions, 0 deletions
diff --git a/lib/Debugger/FDHandle.cpp b/lib/Debugger/FDHandle.cpp new file mode 100644 index 0000000..47322b0 --- /dev/null +++ b/lib/Debugger/FDHandle.cpp @@ -0,0 +1,34 @@ +//===- Support/FileUtilities.cpp - File System Utilities ------------------===// +// +// 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 implements a family of utility functions which are useful for doing +// various things with files. +// +//===----------------------------------------------------------------------===// + +#include "FDHandle.h" +#include <unistd.h> + +using namespace llvm; + +//===----------------------------------------------------------------------===// +// FDHandle class implementation +// + +FDHandle::~FDHandle() throw() { + if (FD != -1) + ::close(FD); +} + +FDHandle &FDHandle::operator=(int fd) throw() { + if (FD != -1) + ::close(FD); + FD = fd; + return *this; +} diff --git a/lib/Debugger/FDHandle.h b/lib/Debugger/FDHandle.h new file mode 100644 index 0000000..cf95874 --- /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 |