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