From b2b81414cc6f4c2c4b5539a680c074c8c4592af7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 12 May 2016 21:43:48 +0300 Subject: Fix issues with SIGPIPE. --- io.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'io.c') diff --git a/io.c b/io.c index ca5545e7..3f25ba9e 100644 --- a/io.c +++ b/io.c @@ -894,9 +894,15 @@ redirect(NODE *redir_exp, int redirtype, int *errflg) (void) flush_io(); os_restore_mode(fileno(stdin)); +#ifdef SIGPIPE + signal(SIGPIPE, SIG_DFL); +#endif if ((rp->output.fp = popen(str, binmode("w"))) == NULL) fatal(_("can't open pipe `%s' for output (%s)"), str, strerror(errno)); +#ifdef SIGPIPE + signal(SIGPIPE, SIG_IGN); +#endif /* set close-on-exec */ os_close_on_exec(fileno(rp->output.fp), str, "pipe", "to"); @@ -2403,9 +2409,18 @@ gawk_popen(const char *cmd, struct redirect *rp) FILE *current; os_restore_mode(fileno(stdin)); +#ifdef SIGPIPE + signal(SIGPIPE, SIG_DFL); +#endif + current = popen(cmd, binmode("r")); + if ((BINMODE & BINMODE_INPUT) != 0) os_setbinmode(fileno(stdin), O_BINARY); +#ifdef SIGPIPE + signal(SIGPIPE, SIG_IGN); +#endif + if (current == NULL) return NULL; os_close_on_exec(fileno(current), cmd, "pipe", "from"); -- cgit v1.2.3