about summary refs log tree commit diff
path: root/src/libutil
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-01-16T21·39+0100
committerEelco Dolstra <edolstra@gmail.com>2017-01-16T21·39+0100
commit8079ab87a2a7cd288a35334517da7a808af8e1e0 (patch)
tree011aa471421d7d51033077994464ecdd3fe9a1eb /src/libutil
parent2b9d0a99cbf7649c20492bc539e2823a2d2e57c5 (diff)
AutoCloseDir: Use std::unique_ptr
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/util.cc46
-rw-r--r--src/libutil/util.hh15
2 files changed, 8 insertions, 53 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 0e1849df09ea..961c14e3a47f 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -234,11 +234,11 @@ DirEntries readDirectory(const Path & path)
     DirEntries entries;
     entries.reserve(64);
 
-    AutoCloseDir dir = opendir(path.c_str());
+    AutoCloseDir dir(opendir(path.c_str()));
     if (!dir) throw SysError(format("opening directory ‘%1%’") % path);
 
     struct dirent * dirent;
-    while (errno = 0, dirent = readdir(dir)) { /* sic */
+    while (errno = 0, dirent = readdir(dir.get())) { /* sic */
         checkInterrupt();
         string name = dirent->d_name;
         if (name == "." || name == "..") continue;
@@ -645,48 +645,6 @@ void Pipe::create()
 //////////////////////////////////////////////////////////////////////
 
 
-AutoCloseDir::AutoCloseDir()
-{
-    dir = 0;
-}
-
-
-AutoCloseDir::AutoCloseDir(DIR * dir)
-{
-    this->dir = dir;
-}
-
-
-AutoCloseDir::~AutoCloseDir()
-{
-    close();
-}
-
-
-void AutoCloseDir::operator =(DIR * dir)
-{
-    this->dir = dir;
-}
-
-
-AutoCloseDir::operator DIR *()
-{
-    return dir;
-}
-
-
-void AutoCloseDir::close()
-{
-    if (dir) {
-        closedir(dir);
-        dir = 0;
-    }
-}
-
-
-//////////////////////////////////////////////////////////////////////
-
-
 Pid::Pid()
     : pid(-1), separatePG(false), killSignal(SIGKILL)
 {
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index d420997815f5..679c3a1b6df4 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -180,18 +180,15 @@ public:
 };
 
 
-class AutoCloseDir
+struct DIRDeleter
 {
-    DIR * dir;
-public:
-    AutoCloseDir();
-    AutoCloseDir(DIR * dir);
-    ~AutoCloseDir();
-    void operator =(DIR * dir);
-    operator DIR *();
-    void close();
+    void operator()(DIR * dir) const {
+        closedir(dir);
+    }
 };
 
+typedef std::unique_ptr<DIR, DIRDeleter> AutoCloseDir;
+
 
 class Pid
 {