about summary refs log tree commit diff
path: root/src/libutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/util.cc10
-rw-r--r--src/libutil/util.hh3
2 files changed, 13 insertions, 0 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 27df7a1aaa52..65c3b15397c7 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -271,6 +271,16 @@ Path createTempDir()
 }
 
 
+void createDirs(const Path & path)
+{
+    if (path == "") return;
+    createDirs(dirOf(path));
+    if (!pathExists(path))
+        if (mkdir(path.c_str(), 0777) == -1)
+            throw SysError(format("creating directory `%1%'") % path);
+}
+
+
 void writeStringToFile(const Path & path, const string & s)
 {
     AutoCloseFD fd(open(path.c_str(),
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index 2577f79e1b87..beb98fe7c6e9 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -107,6 +107,9 @@ void makePathReadOnly(const Path & path);
 /* Create a temporary directory. */
 Path createTempDir();
 
+/* Create a directory and all its parents, if necessary. */
+void createDirs(const Path & path);
+
 /* Create a file and write the given text to it.  The file is written
    in binary mode (i.e., no end-of-line conversions).  The path should
    not already exist. */