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)
|
Path absPath(Path path, Path dir)
|
||||||
{
|
{
|
||||||
if (path[0] != '/') {
|
if (path[0] != '/') {
|
||||||
|
|
|
@ -32,6 +32,9 @@ string getEnv(const string & key, const string & def = "");
|
||||||
/* Get the entire environment. */
|
/* Get the entire environment. */
|
||||||
std::map<std::string, std::string> getEnv();
|
std::map<std::string, std::string> getEnv();
|
||||||
|
|
||||||
|
/* Clear the environment. */
|
||||||
|
void clearEnv();
|
||||||
|
|
||||||
/* Return an absolutized path, resolving paths relative to the
|
/* Return an absolutized path, resolving paths relative to the
|
||||||
specified directory, or the current directory otherwise. The path
|
specified directory, or the current directory otherwise. The path
|
||||||
is also canonicalised. */
|
is also canonicalised. */
|
||||||
|
|
|
@ -16,8 +16,6 @@ using namespace nix;
|
||||||
|
|
||||||
std::string chrootHelperName = "__run_in_chroot";
|
std::string chrootHelperName = "__run_in_chroot";
|
||||||
|
|
||||||
extern char * * environ;
|
|
||||||
|
|
||||||
struct CmdRun : InstallablesCommand
|
struct CmdRun : InstallablesCommand
|
||||||
{
|
{
|
||||||
std::vector<std::string> command = { "bash" };
|
std::vector<std::string> command = { "bash" };
|
||||||
|
@ -109,7 +107,7 @@ struct CmdRun : InstallablesCommand
|
||||||
if (s) kept[var] = s;
|
if (s) kept[var] = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
environ = nullptr;
|
clearEnv();
|
||||||
|
|
||||||
for (auto & var : kept)
|
for (auto & var : kept)
|
||||||
setenv(var.first.c_str(), var.second.c_str(), 1);
|
setenv(var.first.c_str(), var.second.c_str(), 1);
|
||||||
|
|
Loading…
Reference in a new issue