aboutsummaryrefslogtreecommitdiff
path: root/networking/sendmail.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/sendmail.c')
-rw-r--r--networking/sendmail.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/networking/sendmail.c b/networking/sendmail.c
index c195cc021..1c23ca290 100644
--- a/networking/sendmail.c
+++ b/networking/sendmail.c
@@ -120,6 +120,15 @@ static void signal_handler(int signo)
120#undef err 120#undef err
121} 121}
122 122
123/* libbb candidate */
124static pid_t vfork_or_die(void)
125{
126 pid_t pid = vfork();
127 if (pid < 0)
128 bb_perror_msg_and_die("vfork");
129 return pid;
130}
131
123static void launch_helper(const char **argv) 132static void launch_helper(const char **argv)
124{ 133{
125 // setup vanilla unidirectional pipes interchange 134 // setup vanilla unidirectional pipes interchange
@@ -128,7 +137,7 @@ static void launch_helper(const char **argv)
128 137
129 xpipe(pipes); 138 xpipe(pipes);
130 xpipe(pipes+2); 139 xpipe(pipes+2);
131 helper_pid = xvfork(); 140 helper_pid = vfork_or_die();
132 idx = (!helper_pid) * 2; 141 idx = (!helper_pid) * 2;
133 xdup2(pipes[idx], STDIN_FILENO); 142 xdup2(pipes[idx], STDIN_FILENO);
134 xdup2(pipes[3-idx], STDOUT_FILENO); 143 xdup2(pipes[3-idx], STDOUT_FILENO);