changeset 7125:43f38211e7e3

* pipe-safer.c (pipe_safer): Fix misspelling: HAVE_FUNC_PIPE -> HAVE_PIPE. Fix a file descriptor leak when fd_safer fails.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 11 Aug 2006 20:25:07 +0000
parents a61f08bc4d0f
children 055fac8c977b
files lib/ChangeLog lib/pipe-safer.c
diffstat 2 files changed, 23 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -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.
 
--- a/lib/pipe-safer.c
+++ b/lib/pipe-safer.c
@@ -33,25 +33,27 @@
 int
 pipe_safer (int fd[2])
 {
-#if HAVE_FUNC_PIPE
-  int fail = pipe (fd);
-  if (fail)
-    return fail;
+#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;
+	    }
+	}
 
-  {
-    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
+  errno = ENOSYS;
+#endif
 
-  return 0;
-#else /* ! HAVE_FUNC_PIPE */
-  errno = ENOSYS;
   return -1;
-#endif
 }