From 5120dc389fd149dda37c77d84ffb743e03d285ab Mon Sep 17 00:00:00 2001 From: Ben Elliston Date: Mon, 23 Nov 2009 04:42:32 +0000 Subject: [PATCH] pex-unix.c (pex_child_error): Improve warning avoidance by checking the results of write(3) and exiting with... * pex-unix.c (pex_child_error): Improve warning avoidance by checking the results of write(3) and exiting with -2 if any write returns a negative value. Co-Authored-By: Ian Lance Taylor From-SVN: r154431 --- libiberty/ChangeLog | 7 +++++++ libiberty/pex-unix.c | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 4d16be4132eb..79e0462dd263 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,10 @@ +2009-11-23 Ben Elliston + Ian Lance Taylor + + * pex-unix.c (pex_child_error): Improve warning avoidance by + checking the results of write(3) and exiting with -2 if any write + returns a negative value. + 2009-11-22 Steve Ward * dyn-string.c (dyn_string_append_char): Fix typo in comment. diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c index 3753812b3142..4428f60863f6 100644 --- a/libiberty/pex-unix.c +++ b/libiberty/pex-unix.c @@ -368,7 +368,8 @@ static void pex_child_error (struct pex_obj *obj, const char *executable, const char *errmsg, int err) { -#define writeerr(s) if (write (STDERR_FILE_NO, s, strlen (s))) {} + int retval = 0; +#define writeerr(s) retval |= (write (STDERR_FILE_NO, s, strlen (s)) < 0) writeerr (obj->pname); writeerr (": error trying to exec '"); writeerr (executable); @@ -378,7 +379,8 @@ pex_child_error (struct pex_obj *obj, const char *executable, writeerr (xstrerror (err)); writeerr ("\n"); #undef writeerr - _exit (-1); + /* Exit with -2 if the error output failed, too. */ + _exit (retval == 0 ? -1 : -2); } /* Execute a child. */ -- 2.39.2