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