X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=main.c;h=d8cb17f40658f8c7a6b777270a0eb08c4c239df9;hp=92c6f4969695d696fbb5952efac552bd7b20b516;hb=9507e54cab4e270bff14245ecf2599ad59a5dfac;hpb=f80b9e4acc47cf454768b44142495fdb8a68a39f diff --git a/main.c b/main.c index 92c6f49..d8cb17f 100644 --- a/main.c +++ b/main.c @@ -143,6 +143,8 @@ netifd_start_process(const char **argv, char **env, struct netifd_process *proc) goto error; if (!pid) { + int i; + if (env) { while (*env) { putenv(*env); @@ -152,12 +154,17 @@ netifd_start_process(const char **argv, char **env, struct netifd_process *proc) if (proc->dir_fd >= 0) fchdir(proc->dir_fd); - dup2(pfds[1], 0); - dup2(pfds[1], 1); - dup2(pfds[1], 2); - close(pfds[0]); - close(pfds[1]); + + for (i = 0; i <= 2; i++) { + if (pfds[1] == i) + continue; + + dup2(pfds[1], i); + } + + if (pfds[1] > 2) + close(pfds[1]); execvp(argv[0], (char **) argv); exit(127);