From d91215d3f1fe2b672062a1896aba55bb6ba4276c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 9 Aug 2010 16:30:24 +0000 Subject: [PATCH] * Added DescriptorCloser helper class. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37986 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/shared/AutoDeleter.h | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/headers/private/shared/AutoDeleter.h b/headers/private/shared/AutoDeleter.h index 152f02e6be..fecdd54a02 100644 --- a/headers/private/shared/AutoDeleter.h +++ b/headers/private/shared/AutoDeleter.h @@ -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 +#include + namespace BPrivate { + // AutoDeleter template @@ -214,12 +220,41 @@ struct MethodDeleter } }; + +// 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