X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=process.c;h=968e93c3e92db76c92dcd2bcb67b2a2d5d8f8a26;hp=f2a2e4271671c9dd60b31be0a4bc152762f632b4;hb=20c68a9001b0fcd17dff5272b9926e9456e16996;hpb=4f5e39ecfaa49376b0a5c3a4c384e91a828c1105 diff --git a/process.c b/process.c index f2a2e42..968e93c 100644 --- a/process.c +++ b/process.c @@ -30,7 +30,7 @@ static sigset_t registered,pending; struct child { pid_t pid; - string_t desc; + cstring_t desc; process_callback_fn *cb; void *cst; bool_t finished; @@ -57,7 +57,7 @@ static void set_default_signals(void); their exit status using the callback function. We block SIGCHLD until signal processing has begun. */ pid_t makesubproc(process_entry_fn *entry, process_callback_fn *cb, - void *est, void *cst, string_t desc) + void *est, void *cst, cstring_t desc) { struct child *c; pid_t p; @@ -140,7 +140,7 @@ static void sigchld_handler(void *st, int signum) } } -int sys_cmd(const char *path, char *arg, ...) +int sys_cmd(const char *path, const char *arg, ...) { va_list ap; int rv; @@ -155,7 +155,12 @@ int sys_cmd(const char *path, char *arg, ...) char *args[100]; int i; /* Child -> exec command */ - args[0]=arg; + /* Really we ought to strcpy() the arguments into the args array, + since the arguments are const char *. Since we'll exit anyway + if the execvp() fails this seems somewhat pointless, and + increases the chance of the child process failing before it + gets to exec(). */ + args[0]=(char *)arg; i=1; while ((args[i++]=va_arg(ap,char *))); execvp(path,args); @@ -171,8 +176,7 @@ int sys_cmd(const char *path, char *arg, ...) static beforepoll_fn signal_beforepoll; static int signal_beforepoll(void *st, struct pollfd *fds, int *nfds_io, - int *timeout_io, const struct timeval *tv_now, - uint64_t *now) + int *timeout_io) { if (*nfds_io<1) { *nfds_io=1; @@ -185,8 +189,7 @@ static int signal_beforepoll(void *st, struct pollfd *fds, int *nfds_io, } static afterpoll_fn signal_afterpoll; -static void signal_afterpoll(void *st, struct pollfd *fds, int nfds, - const struct timeval *tv, uint64_t *now) +static void signal_afterpoll(void *st, struct pollfd *fds, int nfds) { uint8_t buf[16]; struct signotify *n;