use memset to clear the msgstats in folder_realloc
[mmh] / sbr / execprog.c
1 /*
2 ** execprog.c -- invoke an external command synchronously
3 **               This is a safer alternative to system(3)
4 */
5
6 #include <h/mh.h>
7 #include <unistd.h>
8 #include <stdarg.h>
9 #include <sysexits.h>
10
11
12 int
13 execprog(char *cmd, char **arg)
14 {
15         pid_t pid;
16
17         fflush(stdout);
18         switch (pid = fork()) {
19         case -1:
20                 /* fork error */
21                 advise("fork", "unable to");
22                 return -1;
23
24         case 0:
25                 /* child */
26                 execvp(cmd, arg);
27                 fprintf(stderr, "unable to exec ");
28                 perror(cmd);
29                 _exit(EX_OSERR);
30
31         default:
32                 /* parent */
33                 return pidXwait(pid, cmd);
34         }
35
36         return -1;  /* NOT REACHED */
37 }
38
39
40 int
41 execprogl(char *cmd, char *arg, ...)
42 {
43         va_list ap;
44         int argc = 0;
45         char *argv[MAXARGS];
46         char *cp;
47         int ret;
48
49         argv[argc++] = mhbasename(arg);
50         va_start(ap, arg);
51         while ((cp = va_arg(ap, char *))) {
52                 argv[argc++] = cp;
53         }
54         argv[argc] = NULL;
55         ret = execprog(cmd, argv);
56         va_end(ap);
57
58         return ret;
59 }