1#include <sys/wait.h> 2#include <stdio.h> 3#include <errno.h> 4#include <unistd.h> 5 6#include "utils.h" 7 8int cmd_exec(const char *cmd, char **argv, bool do_fork) 9{ 10 fflush(stdout); 11 if (do_fork) { 12 int status; 13 pid_t pid; 14 15 pid = fork(); 16 if (pid < 0) { 17 perror("fork"); 18 exit(1); 19 } 20 21 if (pid != 0) { 22 /* Parent */ 23 if (waitpid(pid, &status, 0) < 0) { 24 perror("waitpid"); 25 exit(1); 26 } 27 28 if (WIFEXITED(status)) { 29 return WEXITSTATUS(status); 30 } 31 32 exit(1); 33 } 34 } 35 36 if (execvp(cmd, argv) < 0) 37 fprintf(stderr, "exec of \"%s\" failed: %s\n", 38 cmd, strerror(errno)); 39 _exit(1); 40} 41