aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog97
-rw-r--r--include/fcntl.h8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/fxstatat.c64
-rw-r--r--sysdeps/unix/sysv/linux/dl-fxstatat64.c5
-rw-r--r--sysdeps/unix/sysv/linux/faccessat.c73
-rw-r--r--sysdeps/unix/sysv/linux/fchmodat.c63
-rw-r--r--sysdeps/unix/sysv/linux/fchownat.c69
-rw-r--r--sysdeps/unix/sysv/linux/futimesat.c103
-rw-r--r--sysdeps/unix/sysv/linux/fxstatat.c88
-rw-r--r--sysdeps/unix/sysv/linux/fxstatat64.c75
-rw-r--r--sysdeps/unix/sysv/linux/i386/fchownat.c101
-rw-r--r--sysdeps/unix/sysv/linux/i386/fxstatat.c86
-rw-r--r--sysdeps/unix/sysv/linux/linkat.c87
-rw-r--r--sysdeps/unix/sysv/linux/m68k/fchownat.c1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c64
-rw-r--r--sysdeps/unix/sysv/linux/mkdirat.c59
-rw-r--r--sysdeps/unix/sysv/linux/openat.c92
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/fchownat.c105
-rw-r--r--sysdeps/unix/sysv/linux/readlinkat.c60
-rw-r--r--sysdeps/unix/sysv/linux/renameat.c163
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/fchownat.c1
-rw-r--r--sysdeps/unix/sysv/linux/sh/fchownat.c1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/fchownat.c1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c5
-rw-r--r--sysdeps/unix/sysv/linux/symlinkat.c60
-rw-r--r--sysdeps/unix/sysv/linux/unlinkat.c69
-rw-r--r--sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c5
-rw-r--r--sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c67
-rw-r--r--sysdeps/unix/sysv/linux/xmknodat.c47
30 files changed, 147 insertions, 1580 deletions
diff --git a/ChangeLog b/ChangeLog
index 994c600ec2..84f07d2048 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,100 @@
+2014-06-20 Joseph Myers <joseph@codesourcery.com>
+
+ * include/fcntl.h (__atfct_seterrno): Remove prototype.
+ (__atfct_seterrno_2): Likewise.
+ * sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c: Do not include
+ <kernel-features.h>.
+ (__ASSUME_ATFCTS): Do not undefine and redefine.
+ * sysdeps/unix/sysv/linux/alpha/fxstatat.c [__ASSUME_ATFCTS]
+ (__have_atfcts): Remove conditional definition.
+ (__fxstatat([__NR_fstatat64]: Make code unconditional.
+ (__fxstatat) [!__ASSUME_ATFCTS]: Remove conditional code and code
+ unreachable if [__ASSUME_ATFCTS].
+ * sysdeps/unix/sysv/linux/dl-fxstatat64.c (__ASSUME_ATFCTS): Do
+ not undefine and redefine.
+ * sysdeps/unix/sysv/linux/faccessat.c: Do not include
+ <kernel-features.h>.
+ (faccessat) [__NR_faccessat]: Make code unconditional.
+ (faccessat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/fchmodat.c: Do not include
+ <kernel-features.h>.
+ (fchmodat) [__NR_fchmodat]: Make code unconditional.
+ (fchmodat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/fchownat.c: Do not include
+ <kernel-features.h>.
+ (fchownat) [__NR_fchownat]: Make code unconditional.
+ (fchownat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/futimesat.c: Do not include
+ <kernel-features.h>.
+ (futimesat) [__NR_futimesat]: Make code unconditional.
+ (futimesat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/fxstatat.c: Do not include
+ <kernel-features.h>.
+ (__fxstatat) [__NR_newfstatat]: Make code unconditional.
+ (__fxstatat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/fxstatat64.c: Do not include
+ <kernel-features.h>.
+ (__fxstatat64) [__NR_fstatat64]: Make code unconditional.
+ (__fxstatat64) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/i386/fchownat.c: Remove file.
+ * sysdeps/unix/sysv/linux/i386/fxstatat.c: Do not include
+ <kernel-features.h>.
+ (__fxstatat) [__NR_fstatat64]: Make code unconditional.
+ (__fxstatat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/linkat.c: Do not include
+ <kernel-features.h>.
+ (linkat) [__NR_linkat]: Make code unconditional.
+ (linkat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/m68k/fchownat.c: Remove file.
+ * sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c: Do not include
+ <kernel-features.h>.
+ (__fxstatat64) [__NR_newfstatat]: Make code unconditional.
+ (__fxstatat64) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/mkdirat.c: Do not include
+ <kernel-features.h>.
+ (mkdirat) [__NR_mkdirat]: Make code unconditional.
+ (mkdirat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/openat.c: Do not include
+ <kernel-features.h>.
+ [!__ASSUME_ATFCTS] (__atfct_seterrno): Remove function.
+ [!__ASSUME_ATFCTS] (__have_atfcts): Remove variable.
+ (OPENAT_NOT_CANCEL) [__NR_openat]: Make code unconditional.
+ (OPENAT_NOT_CANCEL) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/powerpc/fchownat.c: Remove file.
+ * sysdeps/unix/sysv/linux/readlinkat.c: Do not include
+ <kernel-features.h>.
+ (readlinkat) [__NR_readlinkat]: Make code unconditional.
+ (readlinkat) [!__ASSUME_ATFCTS]: Remove conditional code. Return
+ result of INLINE_SYSCALL directly, not via int variable.
+ * sysdeps/unix/sysv/linux/renameat.c: Do not include
+ <kernel-features.h>.
+ [!__ASSUME_ATFCTS] (__atfct_seterrno_2): Remove function.
+ (renameat) [__NR_renameat]: Make code unconditional.
+ (renameat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/s390/s390-32/fchownat.c: Remove file.
+ * sysdeps/unix/sysv/linux/sh/fchownat.c: Remove file.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/fchownat.c: Remove file.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c
+ (__ASSUME_ATFCTS): Do not undefine and redefine.
+ * sysdeps/unix/sysv/linux/symlinkat.c: Do not include
+ <kernel-features.h>.
+ (symlinkat) [__NR_symlinkat]: Make code unconditional.
+ (symlinkat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/unlinkat.c: Do not include
+ <kernel-features.h>.
+ (unlinkat) [__NR_unlinkat]: Make code unconditional.
+ (unlinkat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c
+ (__ASSUME_ATFCTS): Do not undefine and redefine.
+ * sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c: Do not include
+ <kernel-features.h>.
+ (__fxstatat) [__NR_newfstatat]: Make code unconditional.
+ (__fxstatat) [!__ASSUME_ATFCTS]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/xmknodat.c: Do not include
+ <kernel-features.h>.
+ (__xmknodat) [__NR_mknodat]: Make code unconditional.
+ (__xmknodat) [!__ASSUME_ATFCTS]: Remove conditional code.
+
2014-06-20 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/multiarch/rtld-strlen.S: Removed.
diff --git a/include/fcntl.h b/include/fcntl.h
index b645ffc000..a636f388f4 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -31,14 +31,6 @@ extern int __openat_2 (int __fd, const char *__path, int __oflag);
extern int __openat64_2 (int __fd, const char *__path, int __oflag);
-/* Helper functions for the various *at functions. For Linux. */
-extern void __atfct_seterrno (int errval, int fd, const char *buf)
- attribute_hidden;
-extern void __atfct_seterrno_2 (int errval, int fd1, const char *buf1,
- int fd2, const char *buf2)
- attribute_hidden;
-
-
/* Flag determining whether the *at system calls are available. */
extern int __have_atfcts attribute_hidden;
diff --git a/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c
index 41e83bcf11..330b33f7c7 100644
--- a/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c
+++ b/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c
@@ -1,9 +1 @@
-/* In this implementation we do not really care whether the call fails
- because of missing kernel support since we do not even call the
- function in this case. */
-/* For Alpha, in <kernel-features.h> we redefine the default definition of
- when __ASSUME_ATFCTS is present. The hack must wait until after that. */
-#include <kernel-features.h>
-#undef __ASSUME_ATFCTS
-#define __ASSUME_ATFCTS 1
#include "fxstatat.c"
diff --git a/sysdeps/unix/sysv/linux/alpha/fxstatat.c b/sysdeps/unix/sysv/linux/alpha/fxstatat.c
index a7312068e5..26fe428859 100644
--- a/sysdeps/unix/sysv/linux/alpha/fxstatat.c
+++ b/sysdeps/unix/sysv/linux/alpha/fxstatat.c
@@ -29,10 +29,6 @@
#undef __fxstatat64
-#ifdef __ASSUME_ATFCTS
-# define __have_atfcts 1
-#endif
-
/* Get information about the file NAME in BUF. */
int
__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
@@ -45,67 +41,11 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
cannot actually check this, lest the compiler not optimize the rest
of the function away. */
-#ifdef __NR_fstatat64
- if (__have_atfcts >= 0)
- {
- result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, st, flag);
- if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
- return result;
- errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
-#ifndef __ASSUME_ATFCTS
- if (errno_out == ENOSYS)
- __have_atfcts = -1;
- else
-#endif
- {
- __set_errno (errno_out);
- return -1;
- }
- }
-#endif /* __NR_fstatat64 */
-
- if (flag & ~AT_SYMLINK_NOFOLLOW)
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- char *buf = NULL;
-
- if (fd != AT_FDCWD && file[0] != '/')
- {
- size_t filelen = strlen (file);
- if (__builtin_expect (filelen == 0, 0))
- {
- __set_errno (ENOENT);
- return -1;
- }
-
- static const char procfd[] = "/proc/self/fd/%d/%s";
- /* Buffer for the path name we are going to use. It consists of
- - the string /proc/self/fd/
- - the file descriptor number
- - the file name provided.
- The final NUL is included in the sizeof. A bit of overhead
- due to the format elements compensates for possible negative
- numbers. */
- size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen;
- buf = alloca (buflen);
-
- __snprintf (buf, buflen, procfd, fd, file);
- file = buf;
- }
-
- if (flag & AT_SYMLINK_NOFOLLOW)
- result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
- else
- result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
+ result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, st, flag);
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
return result;
-
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
- __atfct_seterrno (errno_out, fd, buf);
-
+ __set_errno (errno_out);
return -1;
}
libc_hidden_def (__fxstatat)
diff --git a/sysdeps/unix/sysv/linux/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/dl-fxstatat64.c
index 1f8c2e6415..d229d0ea0f 100644
--- a/sysdeps/unix/sysv/linux/dl-fxstatat64.c
+++ b/sysdeps/unix/sysv/linux/dl-fxstatat64.c
@@ -1,6 +1 @@
-/* In this implementation we do not really care whether the call fails
- because of missing kernel support since we do not even call the
- function in this case. */
-#undef __ASSUME_ATFCTS
-#define __ASSUME_ATFCTS 1
#include <fxstatat64.c>
diff --git a/sysdeps/unix/sysv/linux/faccessat.c b/sysdeps/unix/sysv/linux/faccessat.c
index c00f431a45..4a6048ec79 100644
--- a/sysdeps/unix/sysv/linux/faccessat.c
+++ b/sysdeps/unix/sysv/linux/faccessat.c
@@ -24,7 +24,6 @@
#include <unistd.h>
#include <sys/types.h>
#include <alloca.h>
-#include <kernel-features.h>
#include <sysdep.h>
@@ -41,76 +40,8 @@ faccessat (fd, file, mode, flag)
return -1;
}
-#ifdef __NR_faccessat
- if ((flag == 0 || ((flag & ~AT_EACCESS) == 0 && ! __libc_enable_secure))
-# ifndef __ASSUME_ATFCTS
- && __have_atfcts >= 0
-# endif
- )
- {
- int result = INLINE_SYSCALL (faccessat, 3, fd, file, mode);
-# ifndef __ASSUME_ATFCTS
- if (result == -1 && errno == ENOSYS)
- __have_atfcts = -1;
- else
-# endif
- return result;
- }
-#endif
-
-#ifndef __ASSUME_ATFCTS
- if ((!(flag & AT_EACCESS) || ! __libc_enable_secure)
-# ifndef __NR_laccess /* Linux so far has no laccess syscall. */
- && !(flag & AT_SYMLINK_NOFOLLOW)
-# endif
- )
- {
- /* If we are not set-uid or set-gid, access does the same. */
- char *buf = NULL;
-
- if (fd != AT_FDCWD && file[0] != '/')
- {
- size_t filelen = strlen (file);
- if (__glibc_unlikely (filelen == 0))
- {
- __set_errno (ENOENT);
- return -1;
- }
-
- static const char procfd[] = "/proc/self/fd/%d/%s";
- /* Buffer for the path name we are going to use. It consists of
- - the string /proc/self/fd/
- - the file descriptor number
- - the file name provided.
- The final NUL is included in the sizeof. A bit of overhead
- due to the format elements compensates for possible negative
- numbers. */
- size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen;
- buf = alloca (buflen);
-
- __snprintf (buf, buflen, procfd, fd, file);
- file = buf;
- }
-
- int result;
- INTERNAL_SYSCALL_DECL (err);
-
-# ifdef __NR_laccess
- if (flag & AT_SYMLINK_NOFOLLOW)
- result = INTERNAL_SYSCALL (laccess, err, 2, file, mode);
- else
-# endif
- result = INTERNAL_SYSCALL (access, err, 2, file, mode);
-
- if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err)))
- {
- __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
- result = -1;
- }
-
- return result;
- }
-#endif
+ if ((flag == 0 || ((flag & ~AT_EACCESS) == 0 && ! __libc_enable_secure)))
+ return INLINE_SYSCALL (faccessat, 3, fd, file, mode);
struct stat64 stats;
if (__fxstatat64 (_STAT_VER, fd, file, &stats, flag & AT_SYMLINK_NOFOLLOW))
diff --git a/sysdeps/unix/sysv/linux/fchmodat.c b/sysdeps/unix/sysv/linux/fchmodat.c
index 4d3e43e371..446789958f 100644
--- a/sysdeps/unix/sysv/linux/fchmodat.c
+++ b/sysdeps/unix/sysv/linux/fchmodat.c
@@ -24,7 +24,6 @@
#include <unistd.h>
#include <sys/types.h>
#include <alloca.h>
-#include <kernel-features.h>
#include <sysdep.h>
int
@@ -47,65 +46,5 @@ fchmodat (fd, file, mode, flag)
}
#endif
- int result;
-
-#ifdef __NR_fchmodat
-# ifndef __ASSUME_ATFCTS
- if (__have_atfcts >= 0)
-# endif
- {
- result = INLINE_SYSCALL (fchmodat, 3, fd, file, mode);
-# ifndef __ASSUME_ATFCTS
- if (result == -1 && errno == ENOSYS)
- __have_atfcts = -1;
- else
-# endif
- return result;
- }
-#endif
-
-#ifndef __ASSUME_ATFCTS
- char *buf = NULL;
-
- if (fd != AT_FDCWD && file[0] != '/')
- {
- size_t filelen = strlen (file);
- if (__glibc_unlikely (filelen == 0))
- {
- __set_errno (ENOENT);
- return -1;
- }
-
- static const char procfd[] = "/proc/self/fd/%d/%s";
- /* Buffer for the path name we are going to use. It consists of
- - the string /proc/self/fd/
- - the file descriptor number
- - the file name provided.
- The final NUL is included in the sizeof. A bit of overhead
- due to the format elements compensates for possible negative
- numbers. */
- size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen;
- buf = alloca (buflen);
-
- __snprintf (buf, buflen, procfd, fd, file);
- file = buf;
- }
-
- INTERNAL_SYSCALL_DECL (err);
-
-# ifdef __NR_lchmod
- if (flag & AT_SYMLINK_NOFOLLOW)
- result = INTERNAL_SYSCALL (lchmod, err, 2, file, mode);
- else
-# endif
- result = INTERNAL_SYSCALL (chmod, err, 2, file, mode);
-
- if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err)))
- {
- __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
- result = -1;
- }
-
- return result;
-#endif
+ return INLINE_SYSCALL (fchmodat, 3, fd, file, mode);
}
diff --git a/sysdeps/unix/sysv/linux/fchownat.c b/sysdeps/unix/sysv/linux/fchownat.c
index 196b8005c3..fae1256af7 100644
--- a/sysdeps/unix/sysv/linux/fchownat.c
+++ b/sysdeps/unix/sysv/linux/fchownat.c
@@ -24,9 +24,10 @@
#include <sys/types.h>
#include <alloca.h>
#include <sysdep.h>
-#include <kernel-features.h>
+/* Consider moving to syscalls.list. */
+
/* Change the owner and group of FILE. */
int
fchownat (fd, file, owner, group, flag)
@@ -36,69 +37,5 @@ fchownat (fd, file, owner, group, flag)
gid_t group;
int flag;
{
- int result;
-
-#ifdef __NR_fchownat
-# ifndef __ASSUME_ATFCTS
- if (__have_atfcts >= 0)
-# endif
- {
- result = INLINE_SYSCALL (fchownat, 5, fd, file, owner, group, flag);
-# ifndef __ASSUME_ATFCTS
- if (result == -1 && errno == ENOSYS)
- __have_atfcts = -1;
- else
-# endif
- return result;
- }
-#endif
-
-#ifndef __ASSUME_ATFCTS
- if (flag & ~AT_SYMLINK_NOFOLLOW)
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- char *buf = NULL;
-
- if (fd != AT_FDCWD && file[0] != '/')
- {
- size_t filelen = strlen (file);
- if (__glibc_unlikely (filelen == 0))
- {
- __set_errno (ENOENT);
- return -1;
- }
-
- static const char procfd[] = "/proc/self/fd/%d/%s";
- /* Buffer for the path name we are going to use. It consists of
- - the string /proc/self/fd/
- - the file descriptor number
- - the file name provided.
- The final NUL is included in the sizeof. A bit of overhead
- due to the format elements compensates for possible negative
- numbers. */
- size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen;
- buf = alloca (buflen);
-
- __snprintf (buf, buflen, procfd, fd, file);
- file = buf;
- }
-
- INTERNAL_SYSCALL_DECL (err);
-
- if (flag & AT_SYMLINK_NOFOLLOW)
- result = INTERNAL_SYSCALL (lchown, err, 3, file, owner, group);
- else
- result = INTERNAL_SYSCALL (chown, err, 3, file, owner, group);
-
- if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err)))
- {
- __atfct_seterrno