about summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/build.cc8
-rw-r--r--src/libstore/gc.cc17
2 files changed, 12 insertions, 13 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index fd104dffd977..4c03da3e2c39 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -1211,10 +1211,16 @@ void DerivationGoal::computeClosure()
 }
 
 
+static string drvsLogDir = "drvs";
+
+
 void DerivationGoal::openLogFile()
 {
     /* Create a log file. */
-    Path logFileName = nixLogDir + "/drvs/" + baseNameOf(drvPath);
+    Path dir = (format("%1%/%2%") % nixLogDir % drvsLogDir).str();
+    createDirs(dir);
+    
+    Path logFileName = (format("%1%/%2%") % dir % baseNameOf(drvPath)).str();
     fdLogFile = open(logFileName.c_str(),
         O_CREAT | O_WRONLY | O_TRUNC, 0666);
     if (fdLogFile == -1)
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index e1075d0251fd..7f0b07946700 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -43,16 +43,6 @@ static int openGCLock(LockType lockType)
 }
 
 
-static 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 createSymlink(const Path & link, const Path & target, bool careful)
 {
     /* Create directories up to `gcRoot'. */
@@ -122,8 +112,11 @@ void addTempRoot(const Path & path)
     if (fdTempRoots == -1) {
 
         while (1) {
-            fnTempRoots = (format("%1%/%2%/%3%")
-                % nixStateDir % tempRootsDir % getpid()).str();
+            Path dir = (format("%1%/%2%") % nixStateDir % tempRootsDir).str();
+            createDirs(dir);
+            
+            fnTempRoots = (format("%1%/%2%")
+                % dir % getpid()).str();
 
             AutoCloseFD fdGCLock = openGCLock(ltRead);