From 8b7fb5883bf50ab866f785b9cb36c8167f7a3286 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 16 Nov 1998 12:02:08 +0000 Subject: Update. 1998-11-16 Ulrich Drepper * 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 * time/tzfile.c (__tzfile_read): Check that types[i].isdst is in range. 1998-11-16 Ulrich Drepper * libio/bits/stdio.h (fread_unlocked): Do handle zero size and number. (fwrite_unlocked): Likewise. 1998-11-16 Andreas Schwab * 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 * configure.in: Fix regex for makeinfo version string. 1998-11-15 Andreas Schwab * sunrpc/rpc_sample.c (write_sample_server): Avoid -Wparentheses warning. * sunrpc/rpc_svcout.c (write_program): Likewise. 1998-11-15 Andreas Schwab * time/Makefile (CFLAGS-test_time.c): Add -Wno-format. 1998-11-16 Ulrich Drepper . 1998-11-16 Andreas Schwab --- sysdeps/unix/opendir.c | 60 +++++++++++++++++------------------ sysdeps/unix/sysv/linux/arm/mmap.S | 1 + sysdeps/unix/sysv/linux/i386/mmap.S | 1 + sysdeps/unix/sysv/linux/m68k/mmap.S | 1 + sysdeps/unix/sysv/linux/mmap64.c | 3 ++ sysdeps/unix/sysv/linux/syscalls.list | 1 + 6 files changed, 37 insertions(+), 30 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/mmap64.c (limited to 'sysdeps') 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 -/* 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 diff --git a/sysdeps/unix/sysv/linux/arm/mmap.S b/sysdeps/unix/sysv/linux/arm/mmap.S index 905303e8e3..f9a773fc68 100644 --- a/sysdeps/unix/sysv/linux/arm/mmap.S +++ b/sysdeps/unix/sysv/linux/arm/mmap.S @@ -37,3 +37,4 @@ ENTRY (__mmap) PSEUDO_END (__mmap) weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S index e0dde22a9f..a9929c8be1 100644 --- a/sysdeps/unix/sysv/linux/i386/mmap.S +++ b/sysdeps/unix/sysv/linux/i386/mmap.S @@ -46,3 +46,4 @@ L(pseudo_end): PSEUDO_END (__mmap) weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) diff --git a/sysdeps/unix/sysv/linux/m68k/mmap.S b/sysdeps/unix/sysv/linux/m68k/mmap.S index 94578311b3..c7015ae8b0 100644 --- a/sysdeps/unix/sysv/linux/m68k/mmap.S +++ b/sysdeps/unix/sysv/linux/m68k/mmap.S @@ -41,3 +41,4 @@ ENTRY (__mmap) PSEUDO_END (__mmap) weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c new file mode 100644 index 0000000000..fc7e416bfb --- /dev/null +++ b/sysdeps/unix/sysv/linux/mmap64.c @@ -0,0 +1,3 @@ +/* At least for now mmap64 is the same as mmap on all platforms. + When/If the 32 bit platforms get a >32 bit VFS we'll have to + change it for these platforms. */ diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index a2ea5b8d99..ccec06a861 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -24,6 +24,7 @@ klogctl EXTRA syslog 3 klogctl lchown - lchown 3 __lchown lchown mlock EXTRA mlock 2 __mlock mlock mlockall EXTRA mlockall 1 __mlockall mlockall +mmap - mmap 6 __mmap mmap mmap64 mount EXTRA mount 5 __mount mount mremap EXTRA mremap 4 __mremap mremap munlock EXTRA munlock 2 __munlock munlock -- cgit 1.4.1