diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-11-16 12:02:08 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-11-16 12:02:08 +0000 |
commit | 8b7fb5883bf50ab866f785b9cb36c8167f7a3286 (patch) | |
tree | 4f4b8ccad0fec4529b7876a9a5c646f9b28691d1 /sysdeps/unix/opendir.c | |
parent | be1d9d95b122ee20f8217e9263e088dec652543a (diff) | |
download | glibc-8b7fb5883bf50ab866f785b9cb36c8167f7a3286.tar.gz glibc-8b7fb5883bf50ab866f785b9cb36c8167f7a3286.tar.xz glibc-8b7fb5883bf50ab866f785b9cb36c8167f7a3286.zip |
Update.
1998-11-16 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/opendir.c: Use o_directory_works differently. Treat zero value as uninitialized so that variable can go into .bss. * dirent/opendir-tst1.c: Print error strings to stdout. * sysdeps/unix/sysv/linux/mmap64.c: New file. Empty. * sysdeps/unix/sysv/linux/syscalls.list: Add mmap with mmap64 alias. * sysdeps/unix/sysv/linux/arm/mmap.S: Add mmap64 alias. * sysdeps/unix/sysv/linux/i386/mmap.S: Likewise. * sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise. 1998-11-16 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * time/tzfile.c (__tzfile_read): Check that types[i].isdst is in range. 1998-11-16 Ulrich Drepper <drepper@cygnus.com> * libio/bits/stdio.h (fread_unlocked): Do handle zero size and number. (fwrite_unlocked): Likewise. 1998-11-16 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * libio/bits/stdio.h (fread_unlocked): Don't evaluate non-constant twice. Don't bother handling zero size. (frwite_unlocked): Likewise. 1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * configure.in: Fix regex for makeinfo version string. 1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * sunrpc/rpc_sample.c (write_sample_server): Avoid -Wparentheses warning. * sunrpc/rpc_svcout.c (write_program): Likewise. 1998-11-15 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * time/Makefile (CFLAGS-test_time.c): Add -Wno-format. 1998-11-16 Ulrich Drepper <drepper@cygnus.com * misc/sys/mman.h: Pretty print prototypes. 1998-11-15 Ulrich Drepper <drepper@cygnus.com * misc/error.c (error): Don't use result of strerror_r call directly since at least DEC Unix has a wrong return type. Patch by Johan Danielsson <joda@pdc.kth.se>. 1998-11-16 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
Diffstat (limited to 'sysdeps/unix/opendir.c')
-rw-r--r-- | sysdeps/unix/opendir.c | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c index 3cbd6628a3..20b7b4ef98 100644 --- a/sysdeps/unix/opendir.c +++ b/sysdeps/unix/opendir.c @@ -29,37 +29,37 @@ #include <dirstream.h> -/* opendir() must not accidentally open something other than a directory. - Some OS's have kernel support for that, some don't. In the worst - case we have to stat() before the open() AND fstat() after. - - We have to test at runtime for kernel support since libc may have - been compiled with different headers to the kernel it's running on. - This test can't be done reliably in the general case. We'll use - /dev/null, which if it's not a device lots of stuff will break, as - a guinea pig. It may be missing in chroot environments, so we - make sure to fail safe. */ +/* opendir() must not accidentally open something other than a directory. + Some OS's have kernel support for that, some don't. In the worst + case we have to stat() before the open() AND fstat() after. + + We have to test at runtime for kernel support since libc may have + been compiled with different headers to the kernel it's running on. + This test can't be done reliably in the general case. We'll use + /dev/null, which if it's not a device lots of stuff will break, as + a guinea pig. It may be missing in chroot environments, so we + make sure to fail safe. */ #ifdef O_DIRECTORY -static int o_directory_works = -1; +static int o_directory_works; static void -tryopen_o_directory (void) -{ - int serrno = errno; - int x = __open ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY); - - if (x >= 0) - { - __close (x); - o_directory_works = 0; - } - else if (errno != ENOTDIR) - o_directory_works = 0; - else - o_directory_works = 1; - - __set_errno (serrno); -} +tryopen_o_directory (void) +{ + int serrno = errno; + int x = __open ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY); + + if (x >= 0) + { + __close (x); + o_directory_works = -1; + } + else if (errno != ENOTDIR) + o_directory_works = -1; + else + o_directory_works = 1; + + __set_errno (serrno); +} # define EXTRA_FLAGS O_DIRECTORY #else # define EXTRA_FLAGS 0 @@ -86,11 +86,11 @@ __opendir (const char *name) #ifdef O_DIRECTORY /* Test whether O_DIRECTORY works. */ - if (o_directory_works == -1) + if (o_directory_works == 0) tryopen_o_directory (); /* We can skip the expensive `stat' call if O_DIRECTORY works. */ - if (o_directory_works == 0) + if (o_directory_works < 0) #endif { /* We first have to check whether the name is for a directory. We |