For PR351:
authorReid Spencer <rspencer@reidspencer.com>
Wed, 22 Dec 2004 10:24:55 +0000 (10:24 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Wed, 22 Dec 2004 10:24:55 +0000 (10:24 +0000)
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 [new file with mode: 0644]
lib/Debugger/FDHandle.h [new file with mode: 0644]

diff --git a/lib/Debugger/FDHandle.cpp b/lib/Debugger/FDHandle.cpp
new file mode 100644 (file)
index 0000000..47322b0
--- /dev/null
@@ -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 (file)
index 0000000..cf95874
--- /dev/null
@@ -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