-
-/*
- * run-program - execute a program with given arguments.
- * Returns the exit status, or -1 if an error occurred.
- * If the program can't be executed, logs an error unless
- * must_exist is 0 and the program file doesn't exist.
- */
-
-int
-run_program(prog, args, must_exist)
- char *prog;
- char **args;
- int must_exist;
-{
- pid_t pid;
- int status;
-
- pid = fork();
- if (pid == -1) {
- syslog(LOG_ERR, "can't fork to run %s: %m", prog);
- return -1;
- }
- if (pid == 0) {
- execv(prog, args);
- if (must_exist || errno != ENOENT)
- syslog(LOG_WARNING, "can't execute %s: %m", prog);
- _exit(-1);
- }
- if (waitpid(pid, &status, 0) == -1) {
- syslog(LOG_ERR, "waitpid: %m");
- return -1;
- }
- if (WIFSIGNALED(status)) {
- syslog(LOG_INFO, "%s terminated with signal %d", prog,
- WTERMSIG(status));
- return -1;
- }
- return WEXITSTATUS(status);
-}