1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-06 21:41:48 +02:00

* Fix the garbage collector.

This commit is contained in:
Eelco Dolstra 2003-11-22 15:58:34 +00:00
parent 7a02d95418
commit 40d9eb14df
5 changed files with 38 additions and 12 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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. */

View file

@ -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);
}