* pex-unix.c (pex_child_error): Improve warning avoidance by
authorBen Elliston <bje@au.ibm.com>
Mon, 23 Nov 2009 04:42:14 +0000 (04:42 +0000)
committerBen Elliston <bje@au.ibm.com>
Mon, 23 Nov 2009 04:42:14 +0000 (04:42 +0000)
checking the results of write(3) and exiting with -2 if any write
returns a negative value.

libiberty/ChangeLog
libiberty/pex-unix.c

index 4d16be4132eb0a8c3de63c8a4cd2c95c41fd5829..79e0462dd2634d27af0bed5f20f13a12a01747fc 100644 (file)
@@ -1,3 +1,10 @@
+2009-11-23  Ben Elliston  <bje@au.ibm.com>
+           Ian Lance Taylor  <iant@google.com>
+
+       * 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  <planet36@gmail.com>
 
        * dyn-string.c (dyn_string_append_char): Fix typo in comment.
index 3753812b31426adb3224a56278a6575df8a59409..4428f60863f6d546bf3b1f27319ce9e99a536b8c 100644 (file)
@@ -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.  */