2 #include "run-command.h"
5 static int run_external_command(int argc
, const char **argv
)
10 return -ERR_RUN_COMMAND_FORK
;
12 execvp(argv
[0], (char *const*) argv
);
13 return -ERR_RUN_COMMAND_EXEC
;
17 int retval
= waitpid(pid
, &status
, 0);
22 error("waitpid failed (%s)", strerror(retval
));
23 return -ERR_RUN_COMMAND_WAITPID
;
26 return -ERR_RUN_COMMAND_WAITPID_WRONG_PID
;
27 if (WIFSIGNALED(status
))
28 return -ERR_RUN_COMMAND_WAITPID_SIGNAL
;
30 if (!WIFEXITED(status
))
31 return -ERR_RUN_COMMAND_WAITPID_NOEXIT
;
32 code
= WEXITSTATUS(status
);
39 int run_command(const char *cmd
, ...)
42 const char *argv
[MAX_RUN_COMMAND_ARGS
];
46 fprintf(stderr
, "run-command %s (%d)\n", cmd
, ERR_RUN_COMMAND_EXEC
);
51 while (argc
< MAX_RUN_COMMAND_ARGS
) {
52 arg
= argv
[argc
++] = va_arg(param
, char *);
57 if (MAX_RUN_COMMAND_ARGS
<= argc
)
58 return error("too many args to run %s", cmd
);
59 return run_external_command(argc
, argv
);