]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix fopen (non-existing-file, "re") errno
authorAndreas Jaeger <aj@suse.de>
Sat, 20 Aug 2011 13:12:49 +0000 (09:12 -0400)
committerUlrich Drepper <drepper@gmail.com>
Sat, 20 Aug 2011 13:12:49 +0000 (09:12 -0400)
ChangeLog
libio/fileops.c

index 206765b2ae43746e6defcb200a33e4dc4b1c9b8d..ab0f3e3af4a017f2a13e030acfd6ed9231546790 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-19  Andreas Jaeger  <aj@suse.de>
+
+       [BZ #13114]
+       * libio/fileops.c (_IO_new_file_fopen): Fix handling of
+       non-existant file when using close-on-exec mode.
+
 2011-08-20  Ulrich Drepper  <drepper@gmail.com>
 
        * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve): Fix CFI for
index 30de460391ecbed30a281c9c5022a4b5299fcc9a..a6f7cbad82e4d6d96b0d08db6dedc4cafa1be34b 100644 (file)
@@ -345,23 +345,22 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
   result = _IO_file_open (fp, filename, omode|oflags, oprot, read_write,
                          is32not64);
 
-#ifndef __ASSUME_O_CLOEXEC
-  if ((fp->_flags2 & _IO_FLAGS2_CLOEXEC) != 0 && __have_o_cloexec <= 0)
+  if (result != NULL)
     {
-      int fd = _IO_fileno (fp);
-      if (__have_o_cloexec == 0)
+#ifndef __ASSUME_O_CLOEXEC
+      if ((fp->_flags2 & _IO_FLAGS2_CLOEXEC) != 0 && __have_o_cloexec <= 0)
        {
-         int flags = __fcntl (fd, F_GETFD);
-         __have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1;
+         int fd = _IO_fileno (fp);
+         if (__have_o_cloexec == 0)
+           {
+             int flags = __fcntl (fd, F_GETFD);
+             __have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1;
+           }
+         if (__have_o_cloexec < 0)
+           __fcntl (fd, F_SETFD, FD_CLOEXEC);
        }
-      if (__have_o_cloexec < 0)
-       __fcntl (fd, F_SETFD, FD_CLOEXEC);
-    }
 #endif
 
-#ifdef _LIBC
-  if (result != NULL)
-    {
       /* Test whether the mode string specifies the conversion.  */
       cs = strstr (last_recognized + 1, ",ccs=");
       if (cs != NULL)
@@ -432,7 +431,6 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
          result->_mode = 1;
        }
     }
-#endif /* GNU libc */
 
   return result;
 }