1 #include <sys/wait.h>
2 #include <stdio.h>
3 #include <errno.h>
4 #include <unistd.h>
5 
6 #include "utils.h"
7 
cmd_exec(const char * cmd,char ** argv,bool do_fork)8 int 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