New module 'fd-safer-flag'.
authorBruno Haible <bruno@clisp.org>
Fri, 11 Dec 2009 19:59:01 +0000 (20:59 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 11 Dec 2009 19:59:01 +0000 (20:59 +0100)
ChangeLog
lib/dup-safer-flag.c [new file with mode: 0644]
lib/dup-safer.c
lib/fd-safer-flag.c [new file with mode: 0644]
lib/fd-safer.c
lib/unistd-safer.h
modules/cloexec
modules/fd-safer-flag [new file with mode: 0644]
modules/pipe2-safer
modules/stdlib-safer
modules/unistd-safer-tests

index 66219d6..99a631c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
 2009-12-11  Bruno Haible  <bruno@clisp.org>
 
+       New module 'fd-safer-flag'.
+       * lib/dup-safer-flag.c: New file, extracted from lib/dup-safer.c.
+       * lib/dup-safer.c (dup_safer_flag): Remove function.
+       * lib/fd-safer-flag.c: New file, extracted from lib/fd-safer.c.
+       * lib/fd-safer.c (fd_safer_flag): Remove function.
+       * lib/unistd-safer.h (dup_safer_flag, fd_safer_flag): Update condition.
+       * modules/cloexec (configure.ac): Drop indicator macro.
+       * modules/fd-safer-flag: New file.
+       * modules/pipe2-safer (Depends-on): Add fd-safer-flag. Remove cloexec.
+       * modules/stdlib-safer (Depends-on): Add fd-safer-flag.
+       * modules/unistd-safer-tests (Depends-on): Add fd-safer-flag.
+
+2009-12-11  Bruno Haible  <bruno@clisp.org>
+
        Tests for module 'nl_langinfo'.
        * modules/nl_langinfo-tests: New file.
        * tests/test-nl_langinfo.sh: New file.
diff --git a/lib/dup-safer-flag.c b/lib/dup-safer-flag.c
new file mode 100644 (file)
index 0000000..3549d0d
--- /dev/null
@@ -0,0 +1,54 @@
+/* Duplicate a file descriptor result, avoiding clobbering
+   STD{IN,OUT,ERR}_FILENO, with specific flags.
+
+   Copyright (C) 2001, 2004-2006, 2009 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert and Eric Blake.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistd-safer.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "cloexec.h"
+
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0
+#endif
+
+/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
+   STDERR_FILENO.  If FLAG contains O_CLOEXEC, behave like
+   fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD).  */
+
+int
+dup_safer_flag (int fd, int flag)
+{
+  if (flag & O_CLOEXEC)
+    {
+#if defined F_DUPFD_CLOEXEC && !REPLACE_FCHDIR
+      return fcntl (fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1);
+#else
+      /* fd_safer_flag calls us back, but eventually the recursion
+         unwinds and does the right thing.  */
+      fd = dup_cloexec (fd);
+      return fd_safer_flag (fd, flag);
+#endif
+    }
+  return dup_safer (fd);
+}
index 2af8b6a..bb11ba5 100644 (file)
@@ -39,34 +39,3 @@ dup_safer (int fd)
   return fd_safer (dup (fd));
 #endif
 }
-
-#if GNULIB_CLOEXEC
-
-# include "cloexec.h"
-
-# ifndef O_CLOEXEC
-#  define O_CLOEXEC 0
-# endif
-
-/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
-   STDERR_FILENO.  If FLAG contains O_CLOEXEC, behave like
-   fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD).  */
-
-int
-dup_safer_flag (int fd, int flag)
-{
-  if (flag & O_CLOEXEC)
-    {
-# if defined F_DUPFD_CLOEXEC && !REPLACE_FCHDIR
-      return fcntl (fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1);
-# else
-      /* fd_safer_flag calls us back, but eventually the recursion
-         unwinds and does the right thing.  */
-      fd = dup_cloexec (fd);
-      return fd_safer_flag (fd, flag);
-# endif
-    }
-  return dup_safer (fd);
-}
-
-#endif
diff --git a/lib/fd-safer-flag.c b/lib/fd-safer-flag.c
new file mode 100644 (file)
index 0000000..3cb546b
--- /dev/null
@@ -0,0 +1,52 @@
+/* Adjust a file descriptor result so that it avoids clobbering
+   STD{IN,OUT,ERR}_FILENO, with specific flags.
+
+   Copyright (C) 2005-2006, 2009 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert and Eric Blake.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistd-safer.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+/* Return FD, unless FD would be a copy of standard input, output, or
+   error; in that case, return a duplicate of FD, closing FD.  If FLAG
+   contains O_CLOEXEC, the returned FD will have close-on-exec
+   semantics.  On failure to duplicate, close FD, set errno, and
+   return -1.  Preserve errno if FD is negative, so that the caller
+   can always inspect errno when the returned value is negative.
+
+   This function is usefully wrapped around functions that return file
+   descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag).  */
+
+int
+fd_safer_flag (int fd, int flag)
+{
+  if (STDIN_FILENO <= fd && fd <= STDERR_FILENO)
+    {
+      int f = dup_safer_flag (fd, flag);
+      int e = errno;
+      close (fd);
+      errno = e;
+      fd = f;
+    }
+
+  return fd;
+}
index d2e1309..d2aa561 100644 (file)
@@ -22,7 +22,6 @@
 #include "unistd-safer.h"
 
 #include <errno.h>
-
 #include <unistd.h>
 
 /* Return FD, unless FD would be a copy of standard input, output, or
@@ -48,32 +47,3 @@ fd_safer (int fd)
 
   return fd;
 }
-
-#if GNULIB_CLOEXEC
-
-/* Return FD, unless FD would be a copy of standard input, output, or
-   error; in that case, return a duplicate of FD, closing FD.  If FLAG
-   contains O_CLOEXEC, the returned FD will have close-on-exec
-   semantics.  On failure to duplicate, close FD, set errno, and
-   return -1.  Preserve errno if FD is negative, so that the caller
-   can always inspect errno when the returned value is negative.
-
-   This function is usefully wrapped around functions that return file
-   descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag).  */
-
-int
-fd_safer_flag (int fd, int flag)
-{
-  if (STDIN_FILENO <= fd && fd <= STDERR_FILENO)
-    {
-      int f = dup_safer_flag (fd, flag);
-      int e = errno;
-      close (fd);
-      errno = e;
-      fd = f;
-    }
-
-  return fd;
-}
-
-#endif /* GNULIB_CLOEXEC */
index 70cc699..6efe0b2 100644 (file)
@@ -21,7 +21,7 @@ int dup_safer (int);
 int fd_safer (int);
 int pipe_safer (int[2]);
 
-#if GNULIB_CLOEXEC
+#if GNULIB_FD_SAFER_FLAG
 int dup_safer_flag (int, int);
 int fd_safer_flag (int, int);
 #endif
index 93f518e..bb2767d 100644 (file)
@@ -12,7 +12,6 @@ stdbool
 
 configure.ac:
 gl_CLOEXEC
-gl_MODULE_INDICATOR([cloexec])
 
 Makefile.am:
 
diff --git a/modules/fd-safer-flag b/modules/fd-safer-flag
new file mode 100644 (file)
index 0000000..887b797
--- /dev/null
@@ -0,0 +1,26 @@
+Description:
+fd_safer_flag() function: adjust a file descriptor result so that it avoids
+clobbering STD{IN,OUT,ERR}_FILENO, with specific flags.
+
+Files:
+lib/fd-safer-flag.c
+lib/dup-safer-flag.c
+
+Depends-on:
+unistd-safer
+cloexec
+
+configure.ac:
+gl_MODULE_INDICATOR([fd-safer-flag])
+
+Makefile.am:
+lib_SOURCES += fd-safer-flag.c dup-safer-flag.c
+
+Include:
+"unistd-safer.h"
+
+License:
+GPL
+
+Maintainer:
+Eric Blake
index 7297c4c..e01a932 100644 (file)
@@ -6,7 +6,7 @@ Files:
 lib/pipe2-safer.c
 
 Depends-on:
-cloexec
+fd-safer-flag
 pipe2
 unistd-safer
 
index ddeb865..43e6a2d 100644 (file)
@@ -8,6 +8,7 @@ lib/mkstemp-safer.c
 m4/stdlib-safer.m4
 
 Depends-on:
+fd-safer-flag
 mkstemp
 stdlib
 unistd-safer
index 17b17a0..a6da5a9 100644 (file)
@@ -4,6 +4,7 @@ tests/test-dup-safer.c
 Depends-on:
 binary-io
 cloexec
+fd-safer-flag
 stdbool
 
 configure.ac: