Factor out waiting for children into a separate function
This commit is contained in:
		
							
								
								
									
										33
									
								
								xargs.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								xargs.c
									
									
									
									
									
								
							| @@ -20,6 +20,7 @@ static int parsequote(int); | ||||
| static int parseescape(void); | ||||
| static char *poparg(void); | ||||
| static void pusharg(char *); | ||||
| static void waitchld(void); | ||||
| static void runcmd(void); | ||||
|  | ||||
| static char **cmd; | ||||
| @@ -232,20 +233,10 @@ pusharg(char *arg) | ||||
| } | ||||
|  | ||||
| static void | ||||
| runcmd(void) | ||||
| waitchld(void) | ||||
| { | ||||
| 	pid_t pid; | ||||
| 	int status, saved_errno; | ||||
| 	int status; | ||||
|  | ||||
| 	pid = fork(); | ||||
| 	if (pid < 0) | ||||
| 		eprintf("fork:"); | ||||
| 	if (pid == 0) { | ||||
| 		execvp(*cmd, cmd); | ||||
| 		saved_errno = errno; | ||||
| 		weprintf("execvp %s:", *cmd); | ||||
| 		_exit(saved_errno == ENOENT ? 127 : 126); | ||||
| 	} | ||||
| 	wait(&status); | ||||
| 	if (WIFEXITED(status)) { | ||||
| 		if (WEXITSTATUS(status) == 255) | ||||
| @@ -259,3 +250,21 @@ runcmd(void) | ||||
| 	if (WIFSIGNALED(status)) | ||||
| 		exit(125); | ||||
| } | ||||
|  | ||||
| static void | ||||
| runcmd(void) | ||||
| { | ||||
| 	pid_t pid; | ||||
| 	int saved_errno; | ||||
|  | ||||
| 	pid = fork(); | ||||
| 	if (pid < 0) | ||||
| 		eprintf("fork:"); | ||||
| 	if (pid == 0) { | ||||
| 		execvp(*cmd, cmd); | ||||
| 		saved_errno = errno; | ||||
| 		weprintf("execvp %s:", *cmd); | ||||
| 		_exit(saved_errno == ENOENT ? 127 : 126); | ||||
| 	} | ||||
| 	waitchld(); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user