summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-11-22 15:58:34 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-11-22 15:58:34 +0000
commit40d9eb14dfb842c51e9f86818b43ae7711e1a5d6 (patch)
treebf7f5cbee76a95e72682c5f65baecad4d6173ce0 /src
parent7a02d954186d6ba1ea41d9917d63f9fab84736b3 (diff)
downloadguix-40d9eb14dfb842c51e9f86818b43ae7711e1a5d6.tar.gz
* Fix the garbage collector.
Diffstat (limited to 'src')
-rw-r--r--src/libstore/store.cc9
-rw-r--r--src/libutil/util.cc11
-rw-r--r--src/libutil/util.hh5
-rw-r--r--src/nix-env/main.cc4
4 files changed, 20 insertions, 9 deletions
diff --git a/src/libstore/store.cc b/src/libstore/store.cc
index c83316cf6a..caaa293a6f 100644
--- a/src/libstore/store.cc
+++ b/src/libstore/store.cc
@@ -1,9 +1,6 @@
 #include <iostream>
 
-#include <sys/types.h>
-#include <sys/stat.h>
 #include <sys/wait.h>
-#include <fcntl.h>
 #include <unistd.h>
 
 #include "store.hh"
@@ -307,11 +304,7 @@ void addTextToStore(const Path & dstPath, const string & s)
         PathLocks outputLock(lockPaths);
 
         if (!isValidPath(dstPath)) {
-
-            AutoCloseFD fd = open(dstPath.c_str(), O_CREAT | O_EXCL | O_WRONLY, 0666);
-            if (fd == -1) throw SysError(format("creating store file `%1%'") % dstPath);
-
-            writeFull(fd, (unsigned char *) s.c_str(), s.size());
+            writeStringToFile(dstPath, s);
 
             Transaction txn(nixDB);
             registerValidPath(txn, dstPath);
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 6a032a3f10..60b86b162c 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -6,6 +6,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <dirent.h>
+#include <fcntl.h>
 
 #include "util.hh"
 
@@ -192,6 +193,16 @@ Path createTempDir()
 }
 
 
+void writeStringToFile(const Path & path, const string & s)
+{
+    AutoCloseFD fd = open(path.c_str(),
+        O_CREAT | O_EXCL | O_WRONLY, 0666);
+    if (fd == -1)
+        throw SysError(format("creating file `%1%'") % path);
+    writeFull(fd, (unsigned char *) s.c_str(), s.size());
+}
+
+
 Verbosity verbosity = lvlError;
 
 static int nestingLevel = 0;
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index d0e7b3ada8..cca93cdc73 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -87,6 +87,11 @@ void makePathReadOnly(const Path & path);
 /* Create a temporary directory. */
 Path createTempDir();
 
+/* 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. */
+void writeStringToFile(const Path & path, const string & s);
+
 
 /* Messages. */
 
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 73166964fe..a8377582ca 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -139,6 +139,8 @@ Path createLink(Path outPath, Path drvPath)
         num++;
     }
 
+    writeStringToFile(linkPath + "-src.id", drvPath);
+
     return linkPath;
 }
 
@@ -290,7 +292,7 @@ void uninstallDerivations(EvalState & state, Strings drvNames)
             installedDrvs.erase(j->second);
     }
 
-   createUserEnv(state, installedDrvs);
+    createUserEnv(state, installedDrvs);
 }