OSDN Git Service

* pex-unix.c (pex_child_error): Improve warning avoidance by
authorbje <bje@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Nov 2009 04:42:32 +0000 (04:42 +0000)
committerbje <bje@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Nov 2009 04:42:32 +0000 (04:42 +0000)
checking the results of write(3) and exiting with -2 if any write
returns a negative value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154431 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/pex-unix.c

index 4d16be4..79e0462 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 3753812..4428f60 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.  */