[haiku-commits] r37986 - haiku/trunk/headers/private/shared

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 9 Aug 2010 18:30:24 +0200 (CEST)

Author: axeld
Date: 2010-08-09 18:30:24 +0200 (Mon, 09 Aug 2010)
New Revision: 37986
Changeset: http://dev.haiku-os.org/changeset/37986

Modified:
   haiku/trunk/headers/private/shared/AutoDeleter.h
Log:
* Added DescriptorCloser helper class.


Modified: haiku/trunk/headers/private/shared/AutoDeleter.h
===================================================================
--- haiku/trunk/headers/private/shared/AutoDeleter.h    2010-08-09 16:30:04 UTC 
(rev 37985)
+++ haiku/trunk/headers/private/shared/AutoDeleter.h    2010-08-09 16:30:24 UTC 
(rev 37986)
@@ -5,17 +5,23 @@
 #ifndef _AUTO_DELETER_H
 #define _AUTO_DELETER_H
 
+
 /*!    Scope-based automatic deletion of objects/arrays.
        ObjectDeleter  - deletes an object
        ArrayDeleter   - deletes an array
        MemoryDeleter  - free()s malloc()ed memory
        CObjectDeleter - calls an arbitrary specified destructor function
+       DescriptorCloser - closes a file descriptor
 */
 
+
 #include <stdlib.h>
+#include <unistd.h>
 
+
 namespace BPrivate {
 
+
 // AutoDeleter
 
 template<typename C, typename DeleteFunc>
@@ -214,12 +220,41 @@
        }
 };
 
+
+// DescriptorCloser
+
+struct DescriptorCloser {
+       inline DescriptorCloser(int descriptor)
+               :
+               fDescriptor(descriptor)
+       {
+       }
+
+       inline ~DescriptorCloser()
+       {
+               if (fDescriptor >= 0)
+                       close(fDescriptor);
+       }
+
+       inline void Detach()
+       {
+               fDescriptor = -1;
+       }
+
+private:
+       int     fDescriptor;
+};
+
+
 }      // namespace BPrivate
 
+
 using BPrivate::ObjectDeleter;
 using BPrivate::ArrayDeleter;
 using BPrivate::MemoryDeleter;
 using BPrivate::CObjectDeleter;
 using BPrivate::MethodDeleter;
+using BPrivate::DescriptorCloser;
 
+
 #endif // _AUTO_DELETER_H


Other related posts: