aboutsummaryrefslogtreecommitdiff
path: root/libiberty/pex-unix.c
diff options
context:
space:
mode:
authorBen Elliston <bje@au.ibm.com>2009-11-23 04:42:32 +0000
committerBen Elliston <bje@gcc.gnu.org>2009-11-23 15:42:32 +1100
commit5120dc389fd149dda37c77d84ffb743e03d285ab (patch)
tree4de5ac8ddb846000f3be54cbd7905854fe6a78e7 /libiberty/pex-unix.c
parent5154a159dfdf5d7ac7bc3ac9ba5d93e514d51672 (diff)
downloadgcc-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.c6
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. */