* pipe-safer.c (pipe_safer): Fix misspelling: HAVE_FUNC_PIPE ->
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 11 Aug 2006 20:25:07 +0000 (20:25 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 11 Aug 2006 20:25:07 +0000 (20:25 +0000)
HAVE_PIPE.  Fix a file descriptor leak when fd_safer fails.

lib/ChangeLog
lib/pipe-safer.c

index 0add2fafd9533f831364f9629f7558997a4feabf..7131ebc528bd2c0ad7e4722a57b4d9ee07188eaa 100644 (file)
@@ -1,5 +1,8 @@
 2006-08-11  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * pipe-safer.c (pipe_safer): Fix misspelling: HAVE_FUNC_PIPE ->
+       HAVE_PIPE.  Fix a file descriptor leak when fd_safer fails.
+
        * regex_internal.c (re_string_skip_chars): Don't assume WEOF fits
        in wchar_t.  Problem reported by Eric Blake.
 
index 646cd5dabb44db0bc345a5aa989146f7c862b842..81df994545557d6ace231108d4b0581f2679090e 100644 (file)
 int
 pipe_safer (int fd[2])
 {
-#if HAVE_FUNC_PIPE
-  int fail = pipe (fd);
-  if (fail)
-    return fail;
-
-  {
-    int i;
-    for (i = 0; i < 2; i++)
-      {
-       int f = fd_safer (fd[i]);
-       if (f < 0)
-         return -1;
-       fd[i] = f;
-      }
-  }
-
-  return 0;
-#else /* ! HAVE_FUNC_PIPE */
+#if HAVE_PIPE
+  if (pipe (fd) == 0)
+    {
+      int i;
+      for (i = 0; i < 2; i++)
+       {
+         fd[i] = fd_safer (fd[i]);
+         if (fd[i] < 0)
+           {
+             int e = errno;
+             close (fd[1 - i]);
+             errno = e;
+             return -1;
+           }
+       }
+
+      return 0;
+    }
+#else
   errno = ENOSYS;
-  return -1;
 #endif
+
+  return -1;
 }