* configure, config.in: Rebuild.
authorTom Tromey <tromey@redhat.com>
Thu, 6 Nov 2008 14:10:46 +0000 (14:10 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 6 Nov 2008 14:10:46 +0000 (14:10 +0000)
* configure.in: Check for fileno.
* bfdio.c (close_on_exec): New function.
(real_fopen): Use it.
(FD_CLOEXEC): New define.

bfd/ChangeLog
bfd/bfdio.c
bfd/config.in
bfd/configure
bfd/configure.in

index 0504b47..54b69d0 100644 (file)
@@ -1,3 +1,11 @@
+2008-11-06  Tom Tromey  <tromey@redhat.com>
+
+       * configure, config.in: Rebuild.
+       * configure.in: Check for fileno.
+       * bfdio.c (close_on_exec): New function.
+       (real_fopen): Use it.
+       (FD_CLOEXEC): New define.
+
 2008-11-06  Tristan Gingold  <gingold@adacore.com>
 
        * mach-o.h (BFD_MACH_O_NO_SECT): Add; reorders the macros.
index d8aa1de..cb06453 100644 (file)
 #define S_IXOTH 0001    /* Execute by others.  */
 #endif
 
+#ifndef FD_CLOEXEC
+#define FD_CLOEXEC 1
+#endif
+
 file_ptr
 real_ftell (FILE *file)
 {
@@ -62,13 +66,30 @@ real_fseek (FILE *file, file_ptr offset, int whence)
 #endif
 }
 
+/* Mark FILE as close-on-exec.  Return FILE.  FILE may be NULL, in
+   which case nothing is done.  */
+static FILE *
+close_on_exec (FILE *file)
+{
+#if defined (HAVE_FILENO) && defined (F_GETFD)
+  if (file)
+    {
+      int fd = fileno (file);
+      int old = fcntl (fd, F_GETFD, 0);
+      if (old >= 0)
+       fcntl (fd, F_SETFD, old | FD_CLOEXEC);
+    }
+#endif
+  return file;
+}
+
 FILE *
 real_fopen (const char *filename, const char *modes)
 {
 #if defined (HAVE_FOPEN64)
-  return fopen64 (filename, modes);
+  return close_on_exec (fopen64 (filename, modes));
 #else
-  return fopen (filename, modes);
+  return close_on_exec (fopen (filename, modes));
 #endif
 }
 
index f15e4ff..d1797ae 100644 (file)
@@ -78,6 +78,9 @@
 /* Define to 1 if you have the `fdopen' function. */
 #undef HAVE_FDOPEN
 
+/* Define to 1 if you have the `fileno' function. */
+#undef HAVE_FILENO
+
 /* Define to 1 if you have the `fopen64' function. */
 #undef HAVE_FOPEN64
 
index 84ba0f6..5cd7e77 100755 (executable)
@@ -17553,7 +17553,8 @@ fi
 
 
 
-for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid
+
+for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
index 72cefbc..bcc4615 100644 (file)
@@ -179,7 +179,7 @@ GCC_HEADER_STDINT(bfd_stdint.h)
 AC_HEADER_TIME
 AC_HEADER_DIRENT
 ACX_HEADER_STRING
-AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid)
+AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
 AC_CHECK_FUNCS(strtoull)
 
 AC_CHECK_DECLS(basename)