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…
	
	Add table
		Add a link
		
	
		Reference in a new issue