diff options
author | Ben Elliston <bje@au.ibm.com> | 2009-11-23 04:42:32 +0000 |
---|---|---|
committer | Ben Elliston <bje@gcc.gnu.org> | 2009-11-23 15:42:32 +1100 |
commit | 5120dc389fd149dda37c77d84ffb743e03d285ab (patch) | |
tree | 4de5ac8ddb846000f3be54cbd7905854fe6a78e7 /libiberty/pex-unix.c | |
parent | 5154a159dfdf5d7ac7bc3ac9ba5d93e514d51672 (diff) | |
download | gcc-5120dc389fd149dda37c77d84ffb743e03d285ab.zip gcc-5120dc389fd149dda37c77d84ffb743e03d285ab.tar.gz gcc-5120dc389fd149dda37c77d84ffb743e03d285ab.tar.bz2 |
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 <iant@google.com>
From-SVN: r154431
Diffstat (limited to 'libiberty/pex-unix.c')
-rw-r--r-- | libiberty/pex-unix.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c index 3753812..4428f60 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. */ |