nix run: Fix segfault on macOS
Note that clearenv() is not available on macOS. Fixes #1907.
This commit is contained in:
parent
9432f3fb7d
commit
24ec750003
3 changed files with 11 additions and 3 deletions
|
@ -73,6 +73,13 @@ std::map<std::string, std::string> getEnv()
|
|||
}
|
||||
|
||||
|
||||
void clearEnv()
|
||||
{
|
||||
for (auto & name : getEnv())
|
||||
unsetenv(name.first.c_str());
|
||||
}
|
||||
|
||||
|
||||
Path absPath(Path path, Path dir)
|
||||
{
|
||||
if (path[0] != '/') {
|
||||
|
|
|
@ -32,6 +32,9 @@ string getEnv(const string & key, const string & def = "");
|
|||
/* Get the entire environment. */
|
||||
std::map<std::string, std::string> getEnv();
|
||||
|
||||
/* Clear the environment. */
|
||||
void clearEnv();
|
||||
|
||||
/* Return an absolutized path, resolving paths relative to the
|
||||
specified directory, or the current directory otherwise. The path
|
||||
is also canonicalised. */
|
||||
|
|
|
@ -16,8 +16,6 @@ using namespace nix;
|
|||
|
||||
std::string chrootHelperName = "__run_in_chroot";
|
||||
|
||||
extern char * * environ;
|
||||
|
||||
struct CmdRun : InstallablesCommand
|
||||
{
|
||||
std::vector<std::string> command = { "bash" };
|
||||
|
@ -109,7 +107,7 @@ struct CmdRun : InstallablesCommand
|
|||
if (s) kept[var] = s;
|
||||
}
|
||||
|
||||
environ = nullptr;
|
||||
clearEnv();
|
||||
|
||||
for (auto & var : kept)
|
||||
setenv(var.first.c_str(), var.second.c_str(), 1);
|
||||
|
|
Loading…
Reference in a new issue