From 55cf0a6dc90bf0b9e57cbbad4e925ec1b14af7f9 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Wed, 22 Dec 2004 10:24:55 +0000 Subject: 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 --- lib/Debugger/FDHandle.cpp | 34 ++++++++++++++++++++++++++ lib/Debugger/FDHandle.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 lib/Debugger/FDHandle.cpp create mode 100644 lib/Debugger/FDHandle.h (limited to 'lib/Debugger') 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 + +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 -- cgit v1.1