nix run: Fix segfault on macOS

Note that clearenv() is not available on macOS.

Fixes #1907.
This commit is contained in:
Eelco Dolstra 2018-02-26 18:29:40 +01:00
parent 9432f3fb7d
commit 24ec750003
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
3 changed files with 11 additions and 3 deletions

View file

@ -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] != '/') {

View file

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

View file

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