diff options
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/opendir.c | 60 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/mmap.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/mmap.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/m68k/mmap.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mmap64.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/syscalls.list | 1 |
6 files changed, 37 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 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 |