Exit with proper error codes
We still have a few error codes to do, namely when the process is killed or stopped by a signal or when one or more invocations of the command returned a nonzero exit status.
This commit is contained in:
parent
9a1c5783c1
commit
7ec616e1e5
15
xargs.c
15
xargs.c
|
@ -1,4 +1,5 @@
|
|||
/* See LICENSE file for copyright and license details. */
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -19,7 +20,7 @@ static int parsequote(int);
|
|||
static void parseescape(void);
|
||||
static char *poparg(void);
|
||||
static void pusharg(char *);
|
||||
static int runcmd(void);
|
||||
static void runcmd(void);
|
||||
|
||||
static char **cmd;
|
||||
static char *argb;
|
||||
|
@ -85,11 +86,7 @@ main(int argc, char *argv[])
|
|||
i++;
|
||||
}
|
||||
cmd[i] = NULL;
|
||||
if (i == 1 && rflag == 1)
|
||||
;
|
||||
else
|
||||
if (runcmd() == -1)
|
||||
arg = NULL;
|
||||
if (i == 1 && rflag == 1); else runcmd();
|
||||
for (; i >= 0; i--)
|
||||
free(cmd[i]);
|
||||
} while (arg);
|
||||
|
@ -221,7 +218,7 @@ pusharg(char *arg)
|
|||
deinputc(*p);
|
||||
}
|
||||
|
||||
static int
|
||||
static void
|
||||
runcmd(void)
|
||||
{
|
||||
pid_t pid;
|
||||
|
@ -233,9 +230,9 @@ runcmd(void)
|
|||
if (pid == 0) {
|
||||
execvp(*cmd, cmd);
|
||||
eprintf("execvp %s:", *cmd);
|
||||
_exit(errno == ENOENT ? 127 : 126);
|
||||
}
|
||||
wait(&status);
|
||||
if (WIFEXITED(status) && WEXITSTATUS(status) == 255)
|
||||
return -1;
|
||||
return 0;
|
||||
exit(124);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user