* Make nix-env --dry-run print the paths to be substituted correctly
again. (After the previous substituter mechanism refactoring I didn't update the code that obtains the references of substitutable paths.) This required some refactoring: the substituter programs are now kept running and receive/respond to info requests via stdin/stdout.
This commit is contained in:
		
							parent
							
								
									fc691e1cbd
								
							
						
					
					
						commit
						3c92ea399d
					
				
					 14 changed files with 338 additions and 272 deletions
				
			
		|  | @ -579,7 +579,14 @@ AutoCloseFD::AutoCloseFD(int fd) | |||
| 
 | ||||
| AutoCloseFD::AutoCloseFD(const AutoCloseFD & fd) | ||||
| { | ||||
|     abort(); | ||||
|     /* Copying a AutoCloseFD isn't allowed (who should get to close
 | ||||
|        it?).  But as a edge case, allow copying of closed | ||||
|        AutoCloseFDs.  This is necessary due to tiresome reasons | ||||
|        involving copy constructor use on default object values in STL | ||||
|        containers (like when you do `map[value]' where value isn't in | ||||
|        the map yet). */ | ||||
|     this->fd = fd.fd; | ||||
|     if (this->fd != -1) abort(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -832,7 +839,7 @@ string runProgram(Path program, bool searchPath, const Strings & args) | |||
|             pipe.readSide.close(); | ||||
| 
 | ||||
|             if (dup2(pipe.writeSide, STDOUT_FILENO) == -1) | ||||
|                 throw SysError("dupping from-hook write side"); | ||||
|                 throw SysError("dupping stdout"); | ||||
| 
 | ||||
|             std::vector<const char *> cargs; /* careful with c_str()! */ | ||||
|             cargs.push_back(program.c_str()); | ||||
|  | @ -868,6 +875,17 @@ string runProgram(Path program, bool searchPath, const Strings & args) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| void closeMostFDs(const set<int> & exceptions) | ||||
| { | ||||
|     int maxFD = 0; | ||||
|     maxFD = sysconf(_SC_OPEN_MAX); | ||||
|     for (int fd = 0; fd < maxFD; ++fd) | ||||
|         if (fd != STDIN_FILENO && fd != STDOUT_FILENO && fd != STDERR_FILENO | ||||
|             && exceptions.find(fd) == exceptions.end()) | ||||
|             close(fd); /* ignore result */ | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void quickExit(int status) | ||||
| { | ||||
| #ifdef __CYGWIN__ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue