diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2005-03-06 23:12:06 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2005-03-06 23:12:06 +0000 |
commit | 6b76ca09ca0964440800cd2614ff95f3d250826c (patch) | |
tree | 7754209bf0c981840ffb701874f8f67412558f8b | |
parent | 986fc6f13b5f61f46195fd1bc399b6e089c90a6c (diff) | |
download | mailutils-6b76ca09ca0964440800cd2614ff95f3d250826c.tar.gz mailutils-6b76ca09ca0964440800cd2614ff95f3d250826c.tar.bz2 |
(mu_spawnvp): Minor fixes
-rw-r--r-- | mailbox/mutil.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/mailbox/mutil.c b/mailbox/mutil.c index 30044f21e..22e57f761 100644 --- a/mailbox/mutil.c +++ b/mailbox/mutil.c @@ -613,7 +613,7 @@ mu_tempname (const char *tmpdir) * to find it. */ int -mu_spawnvp (const char* prog, const char* const av_[], int* stat) +mu_spawnvp (const char *prog, const char *const av_[], int *stat) { pid_t pid; int err = 0; @@ -623,7 +623,7 @@ mu_spawnvp (const char* prog, const char* const av_[], int* stat) struct sigaction savequit; sigset_t chldmask; sigset_t savemask; - char** av = (char**) av_; + char **av = (char **) av_; if (!prog || !av) return EINVAL; @@ -635,13 +635,20 @@ mu_spawnvp (const char* prog, const char* const av_[], int* stat) if (sigaction (SIGINT, &ignore, &saveintr) < 0) return errno; if (sigaction (SIGQUIT, &ignore, &savequit) < 0) - return errno; + { + sigaction (SIGINT, &saveintr, NULL); + return errno; + } sigemptyset (&chldmask); /* now block SIGCHLD */ sigaddset (&chldmask, SIGCHLD); if (sigprocmask (SIG_BLOCK, &chldmask, &savemask) < 0) - return errno; + { + sigaction (SIGINT, &saveintr, NULL); + sigaction (SIGQUIT, &savequit, NULL); + return errno; + } #ifdef HAVE_VFORK pid = vfork (); @@ -675,7 +682,7 @@ mu_spawnvp (const char* prog, const char* const av_[], int* stat) err = errno; /* error other than EINTR from waitpid() */ break; } - if(err == 0 && stat) + if (err == 0 && stat) *stat = progstat; } |