From fa0b56db76e5c4c5a375930fad358ea5a364d328 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Tue, 1 Jul 2008 16:09:07 +0000 Subject: [PATCH] sendmail: fix wrong vfork usage here too *: shorten error texts function old new delta launch_helper - 151 +151 vfork_or_die 20 - -20 sendgetmail_main 1946 1848 -98 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/1 up/down: 151/-118) Total: 33 bytes --- archival/libunarchive/open_transformer.c | 4 ++-- archival/tar.c | 2 +- miscutils/time.c | 2 +- networking/nc.c | 9 +++------ networking/sendmail.c | 13 +++---------- shell/ash.c | 2 +- 6 files changed, 11 insertions(+), 21 deletions(-) diff --git a/archival/libunarchive/open_transformer.c b/archival/libunarchive/open_transformer.c index a6bc62321..a5ee97167 100644 --- a/archival/libunarchive/open_transformer.c +++ b/archival/libunarchive/open_transformer.c @@ -23,11 +23,11 @@ int FAST_FUNC open_transformer(int src_fd, #if BB_MMU pid = fork(); if (pid == -1) - bb_perror_msg_and_die("can't fork"); + bb_perror_msg_and_die("vfork" + 1); #else pid = vfork(); if (pid == -1) - bb_perror_msg_and_die("can't vfork"); + bb_perror_msg_and_die("vfork"); #endif if (pid == 0) { diff --git a/archival/tar.c b/archival/tar.c index 526edb69d..bb8920ab2 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -538,7 +538,7 @@ static void NOINLINE vfork_compressor(int tar_fd, int gzip) gzipPid = vfork(); if (gzipPid < 0) - bb_perror_msg_and_die("can't vfork"); + bb_perror_msg_and_die("vfork"); if (gzipPid == 0) { /* child */ diff --git a/miscutils/time.c b/miscutils/time.c index a6d158c53..cce7d5b3e 100644 --- a/miscutils/time.c +++ b/miscutils/time.c @@ -374,7 +374,7 @@ static void run_command(char *const *cmd, resource_t *resp) resp->elapsed_ms = monotonic_us() / 1000; pid = vfork(); /* Run CMD as child process. */ if (pid < 0) - bb_error_msg_and_die("cannot fork"); + bb_perror_msg_and_die("fork"); if (pid == 0) { /* If child. */ /* Don't cast execvp arguments; that causes errors on some systems, versus merely warnings if the cast is left off. */ diff --git a/networking/nc.c b/networking/nc.c index 27c58a8c8..2fd42d5f6 100644 --- a/networking/nc.c +++ b/networking/nc.c @@ -150,12 +150,9 @@ int nc_main(int argc, char **argv) goto accept_again; } /* child (or main thread if no multiple -l) */ - if (cfd) { - dup2(cfd, 0); - close(cfd); - } - dup2(0, 1); - dup2(0, 2); + xmove_fd(cfd, 0); + xdup2(0, 1); + xdup2(0, 2); USE_NC_EXTRA(BB_EXECVP(execparam[0], execparam);) /* Don't print stuff or it will go over the wire.... */ _exit(127); diff --git a/networking/sendmail.c b/networking/sendmail.c index 1c23ca290..b58055d39 100644 --- a/networking/sendmail.c +++ b/networking/sendmail.c @@ -120,15 +120,6 @@ static void signal_handler(int signo) #undef err } -/* libbb candidate */ -static pid_t vfork_or_die(void) -{ - pid_t pid = vfork(); - if (pid < 0) - bb_perror_msg_and_die("vfork"); - return pid; -} - static void launch_helper(const char **argv) { // setup vanilla unidirectional pipes interchange @@ -137,7 +128,9 @@ static void launch_helper(const char **argv) xpipe(pipes); xpipe(pipes+2); - helper_pid = vfork_or_die(); + helper_pid = vfork(); + if (helper_pid < 0) + bb_perror_msg_and_die("vfork"); idx = (!helper_pid) * 2; xdup2(pipes[idx], STDIN_FILENO); xdup2(pipes[3-idx], STDOUT_FILENO); diff --git a/shell/ash.c b/shell/ash.c index 85064d5af..58bfc5278 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -4581,7 +4581,7 @@ forkshell(struct job *jp, union node *n, int mode) TRACE(("Fork failed, errno=%d", errno)); if (jp) freejob(jp); - ash_msg_and_raise_error("cannot fork"); + ash_msg_and_raise_error("can't fork"); } if (pid == 0) forkchild(jp, /*n,*/ mode);