From 8b857bd5b0548d0d15e3146b116d639c4dd08dbd Mon Sep 17 00:00:00 2001 From: Michael Meeks Date: Fri, 22 Jul 2011 10:58:00 +0100 Subject: don't let our fprintf on a broken pipe pollute errno's ECHILD with EPIPE --- dmake/unix/runargv.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'dmake') diff --git a/dmake/unix/runargv.c b/dmake/unix/runargv.c index 42b9c25e66a9..2ea22cb63da0 100644 --- a/dmake/unix/runargv.c +++ b/dmake/unix/runargv.c @@ -269,9 +269,10 @@ dmwaitnext( wid, status ) /* If ECHILD is set from waitpid/wait then no child was left. */ if( *wid == -1 ) { - fprintf(stderr, "%s: Internal Error: wait() failed: %d - %s\n", - Pname, errno, strerror(errno) ); - if(errno != ECHILD) { + int realErr = errno; // fprintf can pollute errno + fprintf(stderr, "%s: Internal Error: wait() failed: %d - %s\n", + Pname, errno, strerror(errno) ); + if( realErr != ECHILD ) { /* Wait was interrupted or a child was terminated (SIGCHLD) */ return -2; } else { @@ -369,9 +370,10 @@ dmwaitpid( pqid, wid, status ) } /* If ECHILD is set from waitpid/wait then no child was left. */ if( *wid == -1 ) { + int realErr = errno; // fprintf can pollute errno fprintf(stderr, "%s: Internal Error: waitpid() failed: %d - %s\n", Pname, errno, strerror(errno) ); - if(errno != ECHILD) { + if(realErr != ECHILD) { /* Wait was interrupted or a child was terminated (SIGCHLD) */ return -2; } else { -- cgit v1.2.3