diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/exec.c | 16 | ||||
-rw-r--r-- | Src/utils.c | 4 |
2 files changed, 15 insertions, 5 deletions
diff --git a/Src/exec.c b/Src/exec.c index e3915ddfe..04868bd37 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -4412,11 +4412,17 @@ getoutputfile(char *cmd, char **eptr) untokenize(s); } - addfilelist(nam, 0); + if (!s) /* Unclear why we need to do this before open() */ + child_block(); /* but it has been so for a long time: leave it */ - if (!s) - child_block(); - fd = open(nam, O_WRONLY | O_CREAT | O_EXCL | O_NOCTTY, 0600); + if ((fd = open(nam, O_WRONLY | O_CREAT | O_EXCL | O_NOCTTY, 0600)) < 0) { + zerr("process substitution failed: %e", errno); + free(nam); + if (!s) + child_unblock(); + return NULL; + } + addfilelist(nam, 0); if (s) { /* optimised here-string */ @@ -4427,7 +4433,7 @@ getoutputfile(char *cmd, char **eptr) return nam; } - if (fd < 0 || (cmdoutpid = pid = zfork(NULL)) == -1) { + if ((cmdoutpid = pid = zfork(NULL)) == -1) { /* fork or open error */ child_unblock(); return nam; diff --git a/Src/utils.c b/Src/utils.c index b434821e5..db4352908 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -2164,6 +2164,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname) #if HAVE_MKSTEMP char *suffix = prefix ? ".XXXXXX" : "XXXXXX"; + queue_signals(); if (!prefix && !(prefix = getsparam("TMPPREFIX"))) prefix = DEFAULT_TMPPREFIX; if (use_heap) @@ -2180,6 +2181,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname) #else int failures = 0; + queue_signals(); do { if (!(fn = gettempname(prefix, use_heap))) { fd = -1; @@ -2193,6 +2195,8 @@ gettempfile(const char *prefix, int use_heap, char **tempname) } while (errno == EEXIST && ++failures < 16); #endif *tempname = fn; + + unqueue_signals(); return fd; } |