Factor out waiting for children into a separate function
This commit is contained in:
parent
e27c55aec3
commit
20c0a0b1e7
33
xargs.c
33
xargs.c
@ -20,6 +20,7 @@ static int parsequote(int);
|
|||||||
static int parseescape(void);
|
static int parseescape(void);
|
||||||
static char *poparg(void);
|
static char *poparg(void);
|
||||||
static void pusharg(char *);
|
static void pusharg(char *);
|
||||||
|
static void waitchld(void);
|
||||||
static void runcmd(void);
|
static void runcmd(void);
|
||||||
|
|
||||||
static char **cmd;
|
static char **cmd;
|
||||||
@ -232,20 +233,10 @@ pusharg(char *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
runcmd(void)
|
waitchld(void)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
int status;
|
||||||
int status, 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);
|
|
||||||
}
|
|
||||||
wait(&status);
|
wait(&status);
|
||||||
if (WIFEXITED(status)) {
|
if (WIFEXITED(status)) {
|
||||||
if (WEXITSTATUS(status) == 255)
|
if (WEXITSTATUS(status) == 255)
|
||||||
@ -259,3 +250,21 @@ runcmd(void)
|
|||||||
if (WIFSIGNALED(status))
|
if (WIFSIGNALED(status))
|
||||||
exit(125);
|
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();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user