{
FILE *pipeobj = NULL;
int pipefd [2];
+ sigset_t oldmask, newmask;
if (!out && !err) {
errno = EINVAL;
PIPE_CTOR_FAIL("pipe");
}
+ sigfillset (&newmask);
+ sigprocmask (SIG_SETMASK, &newmask, &oldmask);
+
errno = 0;
pid_t childpid = fork ();
switch (childpid) {
case -1: {
+ sigprocmask (SIG_SETMASK, &oldmask, NULL);
PIPE_CTOR_FAIL("fork");
break;
}
close (pipefd [1]);
+ sigprocmask (SIG_SETMASK, &oldmask, NULL);
+
errno = 0;
if (path) {
execvpe (argv [0], const_cast <char *const *>(argv), environ);
default: {
close (pipefd [1]);
+ sigprocmask (SIG_SETMASK, &oldmask, NULL);
+
errno = 0;
if ((pipeobj = fdopen (pipefd [0], "r")) == NULL) {
PIPE_CTOR_FAIL("fdopen");