diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-10-02 11:55:38 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-10-02 11:55:38 +0000 |
commit | 4193d62e08964e2c26b27674e33327bf0417bab5 (patch) | |
tree | 682be5e80e0ea2b3adaa0f715974549d9d88d2fc | |
parent | 6d478597c7672efc546b6720c8404ffb5f998612 (diff) |
* Nix now respects $TMPDIR for the creation of temporary build directories.
* Retry creation of a temporary directory (with a different name) in the
case of EEXIST.
-rw-r--r-- | src/exec.cc | 6 | ||||
-rw-r--r-- | src/util.cc | 20 | ||||
-rw-r--r-- | src/util.hh | 3 |
3 files changed, 24 insertions, 5 deletions
diff --git a/src/exec.cc b/src/exec.cc index e9ddb5ee1..2e092b2e0 100644 --- a/src/exec.cc +++ b/src/exec.cc @@ -54,11 +54,7 @@ void runProgram(const string & program, /* Create a temporary directory where the build will take place. */ - static int counter = 0; - string tmpDir = (format("/tmp/nix-%1%-%2%") % getpid() % counter++).str(); - - if (mkdir(tmpDir.c_str(), 0777) == -1) - throw SysError(format("creating directory `%1%'") % tmpDir); + string tmpDir = createTempDir(); AutoDelete delTmpDir(tmpDir); diff --git a/src/util.cc b/src/util.cc index bedd031de..ed7562a29 100644 --- a/src/util.cc +++ b/src/util.cc @@ -171,6 +171,26 @@ void makePathReadOnly(const string & path) } +static string tempName() +{ + static int counter = 0; + char * s = getenv("TMPDIR"); + string tmpRoot = s ? canonPath(string(s)) : "/tmp"; + return (format("%1%/nix-%2%-%3%") % tmpRoot % getpid() % counter++).str(); +} + + +string createTempDir() +{ + while (1) { + string tmpDir = tempName(); + if (mkdir(tmpDir.c_str(), 0777) == 0) return tmpDir; + if (errno != EEXIST) + throw SysError(format("creating directory `%1%'") % tmpDir); + } +} + + Verbosity verbosity = lvlError; static int nestingLevel = 0; diff --git a/src/util.hh b/src/util.hh index d0e42f3b1..31dba7faf 100644 --- a/src/util.hh +++ b/src/util.hh @@ -72,6 +72,9 @@ void deletePath(const string & path); /* Make a path read-only recursively. */ void makePathReadOnly(const string & path); +/* Create a temporary directory. */ +string createTempDir(); + /* Messages. */ |