diff options
author | Andreas Jaeger <aj@suse.de> | 2011-08-20 09:12:49 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-08-20 09:12:49 -0400 |
commit | a101b025af141e956feb04042ee75e28997c0011 (patch) | |
tree | 4f4548c658bd59653cb0761cd0ce067ddb8e4783 | |
parent | fd708658c35f9fae6b03ab89014bb19ba6f90952 (diff) | |
download | glibc-a101b025af141e956feb04042ee75e28997c0011.tar.gz glibc-a101b025af141e956feb04042ee75e28997c0011.tar.xz glibc-a101b025af141e956feb04042ee75e28997c0011.zip |
Fix fopen (non-existing-file, "re") errno
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | libio/fileops.c | 24 |
2 files changed, 17 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog index 206765b2ae..ab0f3e3af4 100644 --- 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 diff --git a/libio/fileops.c b/libio/fileops.c index 30de460391..a6f7cbad82 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -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; } |