summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-05-25 19:19:30 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-05-25 19:19:30 +0000
commit21708942c9b115a91dc03318a5f9e14328c5a71e (patch)
treee0b3797820e23ab73ebdab3c34d20943e911669b /sysdeps
parenta386f1cc229e7de02740bef18bdd5d272d1e7537 (diff)
downloadglibc-21708942c9b115a91dc03318a5f9e14328c5a71e.tar.gz
Remove pre-2.4 Linux kernel support.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/configure13
-rw-r--r--sysdeps/unix/sysv/linux/configure.in13
-rw-r--r--sysdeps/unix/sysv/linux/i386/chown.c35
-rw-r--r--sysdeps/unix/sysv/linux/i386/fchown.c37
-rw-r--r--sysdeps/unix/sysv/linux/i386/fchownat.c10
-rw-r--r--sysdeps/unix/sysv/linux/i386/getegid.c31
-rw-r--r--sysdeps/unix/sysv/linux/i386/geteuid.c31
-rw-r--r--sysdeps/unix/sysv/linux/i386/getgid.c32
-rw-r--r--sysdeps/unix/sysv/linux/i386/getgroups.c45
-rw-r--r--sysdeps/unix/sysv/linux/i386/getresgid.c51
-rw-r--r--sysdeps/unix/sysv/linux/i386/getresuid.c50
-rw-r--r--sysdeps/unix/sysv/linux/i386/getuid.c35
-rw-r--r--sysdeps/unix/sysv/linux/i386/lchown.c42
-rw-r--r--sysdeps/unix/sysv/linux/i386/msgctl.c88
-rw-r--r--sysdeps/unix/sysv/linux/i386/semctl.c86
-rw-r--r--sysdeps/unix/sysv/linux/i386/setegid.c24
-rw-r--r--sysdeps/unix/sysv/linux/i386/seteuid.c23
-rw-r--r--sysdeps/unix/sysv/linux/i386/setfsgid.c40
-rw-r--r--sysdeps/unix/sysv/linux/i386/setfsuid.c40
-rw-r--r--sysdeps/unix/sysv/linux/i386/setgid.c43
-rw-r--r--sysdeps/unix/sysv/linux/i386/setgroups.c54
-rw-r--r--sysdeps/unix/sysv/linux/i386/setregid.c42
-rw-r--r--sysdeps/unix/sysv/linux/i386/setresgid.c51
-rw-r--r--sysdeps/unix/sysv/linux/i386/setresuid.c51
-rw-r--r--sysdeps/unix/sysv/linux/i386/setreuid.c41
-rw-r--r--sysdeps/unix/sysv/linux/i386/setuid.c41
-rw-r--r--sysdeps/unix/sysv/linux/i386/shmctl.c100
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h63
-rw-r--r--sysdeps/unix/sysv/linux/local-setxid.h15
-rw-r--r--sysdeps/unix/sysv/linux/opendir.c9
-rw-r--r--sysdeps/unix/sysv/linux/opensock.c9
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/chown.c51
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/lchown.c37
-rw-r--r--sysdeps/unix/sysv/linux/setegid.c24
-rw-r--r--sysdeps/unix/sysv/linux/seteuid.c24
-rw-r--r--sysdeps/unix/sysv/linux/sh/chown.c37
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c86
37 files changed, 79 insertions, 1425 deletions
diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
index fe61c111be..ef2f715782 100644
--- a/sysdeps/unix/sysv/linux/configure
+++ b/sysdeps/unix/sysv/linux/configure
@@ -284,25 +284,25 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in
i386*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.0
+ arch_minimum_kernel=2.4.0
;;
powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.0
+ arch_minimum_kernel=2.4.0
;;
powerpc/powerpc64)
arch_minimum_kernel=2.4.21
;;
s390/s390-32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.10
+ arch_minimum_kernel=2.4.0
;;
s390/s390-64)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.0
;;
sh*)
- arch_minimum_kernel=2.3.99
+ arch_minimum_kernel=2.4.0
libc_cv_gcc_unwind_find_fde=yes
;;
sparc/sparc64*)
@@ -311,13 +311,10 @@ case "$machine" in
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.0
- ;;
- x86_64*)
arch_minimum_kernel=2.4.0
;;
*)
- arch_minimum_kernel=2.2.0
+ arch_minimum_kernel=2.4.0
;;
esac
if test -n "$minimum_kernel"; then
diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in
index 72fbe8422b..c3ec328b9e 100644
--- a/sysdeps/unix/sysv/linux/configure.in
+++ b/sysdeps/unix/sysv/linux/configure.in
@@ -41,25 +41,25 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in
i386*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.0
+ arch_minimum_kernel=2.4.0
;;
powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.0
+ arch_minimum_kernel=2.4.0
;;
powerpc/powerpc64)
arch_minimum_kernel=2.4.21
;;
s390/s390-32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.10
+ arch_minimum_kernel=2.4.0
;;
s390/s390-64)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.0
;;
sh*)
- arch_minimum_kernel=2.3.99
+ arch_minimum_kernel=2.4.0
libc_cv_gcc_unwind_find_fde=yes
;;
sparc/sparc64*)
@@ -68,13 +68,10 @@ case "$machine" in
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.2.0
- ;;
- x86_64*)
arch_minimum_kernel=2.4.0
;;
*)
- arch_minimum_kernel=2.2.0
+ arch_minimum_kernel=2.4.0
;;
esac
if test -n "$minimum_kernel"; then
diff --git a/sysdeps/unix/sysv/linux/i386/chown.c b/sysdeps/unix/sysv/linux/i386/chown.c
index c8e53e4e00..5ea3cfd869 100644
--- a/sysdeps/unix/sysv/linux/i386/chown.c
+++ b/sysdeps/unix/sysv/linux/i386/chown.c
@@ -24,7 +24,6 @@
#include <bp-checks.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
/*
In Linux 2.1.x the chown functions have been changed. A new function lchown
@@ -41,44 +40,12 @@ extern int __chown_is_lchown (const char *__file, uid_t __owner,
extern int __real_chown (const char *__file, uid_t __owner, gid_t __group);
-#ifdef __NR_chown32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_chown32 */
+/* Consider moving to syscalls.list. */
int
__real_chown (const char *file, uid_t owner, gid_t group)
{
-#if __ASSUME_32BITUIDS
return INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
-#else
- /* !__ASSUME_32BITUIDS */
-# ifdef __NR_chown32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_chown32 */
- if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
-#endif
}
diff --git a/sysdeps/unix/sysv/linux/i386/fchown.c b/sysdeps/unix/sysv/linux/i386/fchown.c
index e520db9fea..4d76538b6c 100644
--- a/sysdeps/unix/sysv/linux/i386/fchown.c
+++ b/sysdeps/unix/sysv/linux/i386/fchown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -22,46 +22,13 @@
#include <sys/syscall.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_fchown32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_fchown32 */
+/* Consider moving to syscalls.list. */
int
__fchown (int fd, uid_t owner, gid_t group)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (fchown32, 3, fd, owner, group);
-#else
-# ifdef __NR_fchown32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (fchown32, 3, fd, owner, group);
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_fchown32 */
-
- if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- return INLINE_SYSCALL (fchown, 3, fd, owner, group);
-#endif
}
weak_alias (__fchown, fchown)
diff --git a/sysdeps/unix/sysv/linux/i386/fchownat.c b/sysdeps/unix/sysv/linux/i386/fchownat.c
index 6b748d16ba..18c8f0b317 100644
--- a/sysdeps/unix/sysv/linux/i386/fchownat.c
+++ b/sysdeps/unix/sysv/linux/i386/fchownat.c
@@ -83,7 +83,6 @@ fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag)
file = buf;
}
-# if __ASSUME_32BITUIDS > 0
INTERNAL_SYSCALL_DECL (err);
if (flag & AT_SYMLINK_NOFOLLOW)
@@ -98,15 +97,6 @@ fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag)
__atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
return -1;
}
-# else
- /* Don't inline the rest to avoid unnecessary code duplication. */
- if (flag & AT_SYMLINK_NOFOLLOW)
- result = __lchown (file, owner, group);
- else
- result = __chown (file, owner, group);
- if (result < 0)
- __atfct_seterrno (errno, fd, buf);
-# endif
return result;
diff --git a/sysdeps/unix/sysv/linux/i386/getegid.c b/sysdeps/unix/sysv/linux/i386/getegid.c
index 8461be9e42..41c4d08c8a 100644
--- a/sysdeps/unix/sysv/linux/i386/getegid.c
+++ b/sysdeps/unix/sysv/linux/i386/getegid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,41 +20,14 @@
#include <sysdep.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
-#ifdef __NR_getegid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids attribute_hidden;
-# endif
-#endif /* __NR_getegid32 */
+/* Consider moving to syscalls.list. */
gid_t
__getegid (void)
{
INTERNAL_SYSCALL_DECL (err);
-#if __ASSUME_32BITUIDS > 0
- /* No error checking. */
return INTERNAL_SYSCALL (getegid32, err, 0);
-#else
-# ifdef __NR_getegid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
-
- result = INTERNAL_SYSCALL (getegid32, err, 0);
- if (! INTERNAL_SYSCALL_ERROR_P (result, err)
- || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
- return result;
-
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_getegid32 */
-
- /* No error checking. */
- return INTERNAL_SYSCALL (getegid, err, 0);
-#endif
}
weak_alias (__getegid, getegid)
diff --git a/sysdeps/unix/sysv/linux/i386/geteuid.c b/sysdeps/unix/sysv/linux/i386/geteuid.c
index a0e4864dee..42e7686170 100644
--- a/sysdeps/unix/sysv/linux/i386/geteuid.c
+++ b/sysdeps/unix/sysv/linux/i386/geteuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,41 +20,14 @@
#include <sysdep.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
-#ifdef __NR_geteuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids attribute_hidden;
-# endif
-#endif /* __NR_geteuid32 */
+/* Consider moving to syscalls.list. */
uid_t
__geteuid (void)
{
INTERNAL_SYSCALL_DECL (err);
-#if __ASSUME_32BITUIDS > 0
- /* No error checking. */
return INTERNAL_SYSCALL (geteuid32, err, 0);
-#else
-# ifdef __NR_geteuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
-
- result = INTERNAL_SYSCALL (geteuid32, err, 0);
- if (! INTERNAL_SYSCALL_ERROR_P (result, err)
- || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
- return result;
-
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_geteuid32 */
-
- /* No error checking. */
- return INTERNAL_SYSCALL (geteuid, err, 0);
-#endif
}
weak_alias (__geteuid, geteuid)
diff --git a/sysdeps/unix/sysv/linux/i386/getgid.c b/sysdeps/unix/sysv/linux/i386/getgid.c
index 30c4bc840b..e611fb494e 100644
--- a/sysdeps/unix/sysv/linux/i386/getgid.c
+++ b/sysdeps/unix/sysv/linux/i386/getgid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -21,41 +21,13 @@
#include <sysdep.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
-
-#ifdef __NR_getgid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids attribute_hidden;
-# endif
-#endif /* __NR_getgid32 */
+/* Consider moving to syscalls.list. */
gid_t
__getgid (void)
{
INTERNAL_SYSCALL_DECL (err);
-#if __ASSUME_32BITUIDS > 0
- /* No error checking. */
return INTERNAL_SYSCALL (getgid32, err, 0);
-#else
-# ifdef __NR_getgid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
-
- result = INTERNAL_SYSCALL (getgid32, err, 0);
- if (! INTERNAL_SYSCALL_ERROR_P (result, err)
- || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
- return result;
-
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_getgid32 */
-
- /* No error checking. */
- return INTERNAL_SYSCALL (getgid, err, 0);
-#endif
}
weak_alias (__getgid, getgid)
diff --git a/sysdeps/unix/sysv/linux/i386/getgroups.c b/sysdeps/unix/sysv/linux/i386/getgroups.c
index 97e1b0abef..e0871ec2d2 100644
--- a/sysdeps/unix/sysv/linux/i386/getgroups.c
+++ b/sysdeps/unix/sysv/linux/i386/getgroups.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,57 +25,16 @@
#include <bp-checks.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_getgroups32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids attribute_hidden;
-# endif
-#endif /* __NR_getgroups32 */
+/* Consider moving to syscalls.list. */
/* For Linux we must convert the array of groups from the format that the
kernel returns. */
int
__getgroups (int n, gid_t *groups)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (getgroups32, 2, n, CHECK_N (groups, n));
-#else
- if (__builtin_expect (n, 1) < 0)
- {
- __set_errno (EINVAL);
- return -1;
- }
- else
- {
-# ifdef __NR_getgroups32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (getgroups32, 2, n, CHECK_N (groups, n));
- if (result != -1 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_getgroups32 */
-
- int i, ngids;
- __kernel_gid_t kernel_groups[n = MIN (n, __sysconf (_SC_NGROUPS_MAX))];
-
- ngids = INLINE_SYSCALL (getgroups, 2, n, CHECK_N (kernel_groups, n));
- if (n != 0 && ngids > 0)
- for (i = 0; i < ngids; i++)
- (__ptrvalue (groups))[i] = kernel_groups[i];
- return ngids;
- }
-#endif
}
weak_alias (__getgroups, getgroups)
diff --git a/sysdeps/unix/sysv/linux/i386/getresgid.c b/sysdeps/unix/sysv/linux/i386/getresgid.c
index c01497e7e7..d9ce513b1d 100644
--- a/sysdeps/unix/sysv/linux/i386/getresgid.c
+++ b/sysdeps/unix/sysv/linux/i386/getresgid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,60 +25,13 @@
#include <sys/syscall.h>
#include <bp-checks.h>
-#include <kernel-features.h>
-
-#ifdef __NR_getresgid
-
-# ifdef __NR_getresgid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-# endif /* __NR_getresgid32 */
-
+/* Consider moving to syscalls.list. */
int
__getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid)
{
-# if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (getresgid32, 3, CHECK_1 (rgid),
CHECK_1 (egid), CHECK_1 (sgid));
-# else
- __kernel_gid_t k_rgid, k_egid, k_sgid;
- int result;
-# ifdef __NR_getresgid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int r;
- int saved_errno = errno;
-
- r = INLINE_SYSCALL (getresgid32, 3, CHECK_1 (rgid),
- CHECK_1 (egid), CHECK_1 (sgid));
- if (r == 0 || errno != ENOSYS)
- return r;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_getresgid32 */
-
- result = INLINE_SYSCALL (getresgid, 3, __ptrvalue (&k_rgid),
- __ptrvalue (&k_egid), __ptrvalue (&k_sgid));
-
- if (result == 0)
- {
- *rgid = (gid_t) k_rgid;
- *egid = (gid_t) k_egid;
- *sgid = (gid_t) k_sgid;
- }
-
- return result;
-# endif
}
libc_hidden_def (__getresgid)
weak_alias (__getresgid, getresgid)
-
-#else
-# include <posix/getresgid.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/getresuid.c b/sysdeps/unix/sysv/linux/i386/getresuid.c
index cbad2d3da5..f9c3180fb1 100644
--- a/sysdeps/unix/sysv/linux/i386/getresuid.c
+++ b/sysdeps/unix/sysv/linux/i386/getresuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,59 +25,13 @@
#include <sys/syscall.h>
#include <bp-checks.h>
-#include <kernel-features.h>
-
-#ifdef __NR_getresuid
-
-# ifdef __NR_getresuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-# endif /* __NR_getresuid32 */
+/* Consider moving to syscalls.list. */
int
__getresuid (uid_t *ruid, uid_t *euid, uid_t *suid)
{
-# if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (getresuid32, 3, CHECK_1 (ruid),
CHECK_1 (euid), CHECK_1 (suid));
-# else
- __kernel_uid_t k_ruid, k_euid, k_suid;
- int result;
-# ifdef __NR_getresuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int r;
- int saved_errno = errno;
-
- r = INLINE_SYSCALL (getresuid32, 3, CHECK_1 (ruid),
- CHECK_1 (euid), CHECK_1 (suid));
- if (r == 0 || errno != ENOSYS)
- return r;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_getresuid32 */
-
- result = INLINE_SYSCALL (getresuid, 3, __ptrvalue (&k_ruid),
- __ptrvalue (&k_euid), __ptrvalue (&k_suid));
-
- if (result == 0)
- {
- *ruid = (uid_t) k_ruid;
- *euid = (uid_t) k_euid;
- *suid = (uid_t) k_suid;
- }
-
- return result;
-# endif
}
libc_hidden_def (__getresuid)
weak_alias (__getresuid, getresuid)
-
-#else
-# include <posix/getresuid.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/getuid.c b/sysdeps/unix/sysv/linux/i386/getuid.c
index 6bbc74d4c5..67d63a416b 100644
--- a/sysdeps/unix/sysv/linux/i386/getuid.c
+++ b/sysdeps/unix/sysv/linux/i386/getuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -21,44 +21,13 @@
#include <sysdep.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
-
-#ifdef __NR_getuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. This is the definition.
- -1 if libc does not know yet whether kernel has 32bit uids or not.
- 0 if it does have them.
- 1 if it does not have them. */
-int __libc_missing_32bit_uids attribute_hidden = -1;
-# endif
-#endif /* __NR_getuid32 */
+/* Consider moving to syscalls.list. */
uid_t
__getuid (void)
{
INTERNAL_SYSCALL_DECL (err);
-#if __ASSUME_32BITUIDS > 0
- /* No error checking. */
return INTERNAL_SYSCALL (getuid32, err, 0);
-#else
-# ifdef __NR_getuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
-
- result = INTERNAL_SYSCALL (getuid32, err, 0);
- if (! INTERNAL_SYSCALL_ERROR_P (result, err)
- || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
- return result;
-
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_getuid32 */
-
- /* No error checking. */
- return INTERNAL_SYSCALL (getuid, err, 0);
-#endif
}
weak_alias (__getuid, getuid)
diff --git a/sysdeps/unix/sysv/linux/i386/lchown.c b/sysdeps/unix/sysv/linux/i386/lchown.c
index 2184c28600..6190d02a6f 100644
--- a/sysdeps/unix/sysv/linux/i386/lchown.c
+++ b/sysdeps/unix/sysv/linux/i386/lchown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000,2003,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,51 +23,13 @@
#include <bp-checks.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_lchown
-# ifdef __NR_lchown32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-# endif /* __NR_lchown32 */
+/* Consider moving to syscalls.list. */
int
__lchown (const char *file, uid_t owner, gid_t group)
{
-# if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group);
-# else
-# ifdef __NR_lchown32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group);
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_lchown32 */
-
- if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- return INLINE_SYSCALL (lchown, 3, CHECK_STRING (file), owner, group);
-# endif
}
weak_alias (__lchown, lchown)
-
-#else
-# include <io/lchown.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/msgctl.c b/sysdeps/unix/sysv/linux/i386/msgctl.c
index fa5a82fa38..2125ae192c 100644
--- a/sysdeps/unix/sysv/linux/i386/msgctl.c
+++ b/sysdeps/unix/sysv/linux/i386/msgctl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1997,1998,2000,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -25,7 +25,6 @@
#include <sys/syscall.h>
#include <bp-checks.h>
-#include <kernel-features.h>
#include <shlib-compat.h>
struct __old_msqid_ds
@@ -52,14 +51,6 @@ int __old_msgctl (int, int, struct __old_msqid_ds *);
#endif
int __new_msgctl (int, int, struct msqid_ds *);
-#ifdef __NR_getuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif
-
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
attribute_compat_text_section
@@ -74,85 +65,8 @@ compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0);
int
__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
msqid, cmd | __IPC_64, 0, CHECK_1 (buf));
-#else
- switch (cmd) {
- case MSG_STAT:
- case IPC_STAT:
- case IPC_SET:
- break;
- default:
- return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
- msqid, cmd, 0, CHECK_1 (buf));
- }
-
- {
- int result;
- struct __old_msqid_ds old;
-
-#ifdef __NR_getuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- if (__libc_missing_32bit_uids < 0)
- {
- int save_errno = errno;
-
- /* Test presence of new IPC by testing for getuid32 syscall. */
- result = INLINE_SYSCALL (getuid32, 0);
- if (result == -1 && errno == ENOSYS)
- __libc_missing_32bit_uids = 1;
- else
- __libc_missing_32bit_uids = 0;
- __set_errno(save_errno);
- }
- if (__libc_missing_32bit_uids <= 0)
- {
- result = INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
- msqid, cmd | __IPC_64, 0, CHECK_1 (buf));
- return result;
- }
- }
-#endif
- if (cmd == IPC_SET)
- {
- old.msg_perm.uid = buf->msg_perm.uid;
- old.msg_perm.gid = buf->msg_perm.gid;
- old.msg_perm.mode = buf->msg_perm.mode;
- old.msg_qbytes = buf->msg_qbytes;
- if (old.msg_perm.uid != buf->msg_perm.uid ||
- old.msg_perm.gid != buf->msg_perm.gid ||
- old.msg_qbytes != buf->msg_qbytes)
- {
- __set_errno (EINVAL);
- return -1;
- }
- }
- result = INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
- msqid, cmd, 0, __ptrvalue (&old));
- if (result != -1 && cmd != IPC_SET)
- {
- memset(buf, 0, sizeof(*buf));
- buf->msg_perm.__key = old.msg_perm.__key;
- buf->msg_perm.uid = old.msg_perm.uid;
- buf->msg_perm.gid = old.msg_perm.gid;
- buf->msg_perm.cuid = old.msg_perm.cuid;
- buf->msg_perm.cgid = old.msg_perm.cgid;
- buf->msg_perm.mode = old.msg_perm.mode;
- buf->msg_perm.__seq = old.msg_perm.__seq;
- buf->msg_stime = old.msg_stime;
- buf->msg_rtime = old.msg_rtime;
- buf->msg_ctime = old.msg_ctime;
- buf->__msg_cbytes = old.__msg_cbytes;
- buf->msg_qnum = old.msg_qnum;
- buf->msg_qbytes = old.msg_qbytes;
- buf->msg_lspid = old.msg_lspid;
- buf->msg_lrpid = old.msg_lrpid;
- }
- return result;
- }
-#endif
}
versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/semctl.c b/sysdeps/unix/sysv/linux/i386/semctl.c
index 0c4ad89f89..5e2d948059 100644
--- a/sysdeps/unix/sysv/linux/i386/semctl.c
+++ b/sysdeps/unix/sysv/linux/i386/semctl.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1995,1997,1998,2000,2003,2004,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -26,7 +25,6 @@
#include <string.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
#include <shlib-compat.h>
struct __old_semid_ds
@@ -54,14 +52,6 @@ union semun
#include <bp-checks.h>
#include <bp-semctl.h> /* definition of CHECK_SEMCTL needs union semum */
-#ifdef __NR_getuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif
-
/* Return identifier for array of NSEMS semaphores associated with
KEY. */
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
@@ -103,82 +93,8 @@ __new_semctl (int semid, int semnum, int cmd, ...)
va_end (ap);
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
-#else
- switch (cmd) {
- case SEM_STAT:
- case IPC_STAT:
- case IPC_SET:
- break;
- default:
- return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd,
- CHECK_SEMCTL (&arg, semid, cmd));
- }
-
- {
- int result;
- struct __old_semid_ds old;
- struct semid_ds *buf;
-
-#ifdef __NR_getuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- if (__libc_missing_32bit_uids < 0)
- {
- int save_errno = errno;
-
- /* Test presence of new IPC by testing for getuid32 syscall. */
- result = INLINE_SYSCALL (getuid32, 0);
- if (result == -1 && errno == ENOSYS)
- __libc_missing_32bit_uids = 1;
- else
- __libc_missing_32bit_uids = 0;
- __set_errno(save_errno);
- }
- if (__libc_missing_32bit_uids <= 0)
- {
- result = INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
- CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
- return result;
- }
- }
-#endif
-
- buf = arg.buf;
- arg.__old_buf = &old;
- if (cmd == IPC_SET)
- {
- old.sem_perm.uid = buf->sem_perm.uid;
- old.sem_perm.gid = buf->sem_perm.gid;
- old.sem_perm.mode = buf->sem_perm.mode;
- if (old.sem_perm.uid != buf->sem_perm.uid ||
- old.sem_perm.gid != buf->sem_perm.gid)
- {
- __set_errno (EINVAL);
- return -1;
- }
- }
- result = INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd,
- CHECK_SEMCTL (&arg, semid, cmd));
- if (result != -1 && cmd != IPC_SET)
- {
- memset(buf, 0, sizeof(*buf));
- buf->sem_perm.__key = old.sem_perm.__key;
- buf->sem_perm.uid = old.sem_perm.uid;
- buf->sem_perm.gid = old.sem_perm.gid;
- buf->sem_perm.cuid = old.sem_perm.cuid;
- buf->sem_perm.cgid = old.sem_perm.cgid;
- buf->sem_perm.mode = old.sem_perm.mode;
- buf->sem_perm.__seq = old.sem_perm.__seq;
- buf->sem_otime = old.sem_otime;
- buf->sem_ctime = old.sem_ctime;
- buf->sem_nsems = old.sem_nsems;
- }
- return result;
- }
-#endif
}
versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/setegid.c b/sysdeps/unix/sysv/linux/i386/setegid.c
index e0b82ccf94..20170e327e 100644
--- a/sysdeps/unix/sysv/linux/i386/setegid.c
+++ b/sysdeps/unix/sysv/linux/i386/setegid.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1995-1998,2000,2002,2003,2004,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,13 +18,8 @@
#include <errno.h>
#include <unistd.h>
#include <setxid.h>
-#include <kernel-features.h>
-#ifdef __NR_setresgid
-extern int __setresgid (uid_t rgid, uid_t egid, uid_t sgid);
-#endif
-
int
setegid (gid)
gid_t gid;
@@ -38,23 +32,7 @@ setegid (gid)
return -1;
}
-#if __ASSUME_32BITUIDS > 0
result = INLINE_SETXID_SYSCALL (setresgid32, 3, -1, gid, -1);
-#else
- /* First try the syscall. */
-# ifdef __NR_setresgid
- result = __setresgid (-1, gid, -1);
-# if __ASSUME_SETRESGID_SYSCALL > 0
- if (0)
-# else
- if (result == -1 && errno == ENOSYS)
-# endif
- /* No system call available. Use emulation. This may not work
- since `setregid' also sets the saved user ID when GID is not
- equal to the real user ID, making it impossible to switch back. */
-# endif
- result = __setregid (-1, gid);
-#endif
return result;
}
diff --git a/sysdeps/unix/sysv/linux/i386/seteuid.c b/sysdeps/unix/sysv/linux/i386/seteuid.c
index af3231d84b..d41e51b294 100644
--- a/sysdeps/unix/sysv/linux/i386/seteuid.c
+++ b/sysdeps/unix/sysv/linux/i386/seteuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,13 +18,8 @@
#include <errno.h>
#include <unistd.h>
#include <setxid.h>
-#include <kernel-features.h>
-#ifdef __NR_setresuid
-extern int __setresuid (uid_t ruid, uid_t euid, uid_t suid);
-#endif
-
int
seteuid (uid_t uid)
{
@@ -36,23 +31,7 @@ seteuid (uid_t uid)
return -1;
}
-#if __ASSUME_32BITUIDS > 0
result = INLINE_SETXID_SYSCALL (setresuid32, 3, -1, uid, -1);
-#else
- /* First try the syscall. */
-# ifdef __NR_setresuid
- result = __setresuid (-1, uid, -1);
-# if __ASSUME_SETRESUID_SYSCALL > 0
- if (0)
-# else
- if (result == -1 && errno == ENOSYS)
-# endif
- /* No system call available. Use emulation. This may not work
- since `setreuid' also sets the saved user ID when UID is not
- equal to the real user ID, making it impossible to switch back. */
-# endif
- result = __setreuid (-1, uid);
-#endif
return result;
}
diff --git a/sysdeps/unix/sysv/linux/i386/setfsgid.c b/sysdeps/unix/sysv/linux/i386/setfsgid.c
index 12c66c5b6e..fe5fd86596 100644
--- a/sysdeps/unix/sysv/linux/i386/setfsgid.c
+++ b/sysdeps/unix/sysv/linux/i386/setfsgid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -22,48 +22,12 @@
#include <sysdep.h>
#include <sys/syscall.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-
-#ifdef __NR_setfsgid
-
-# ifdef __NR_setfsgid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids attribute_hidden;
-# endif
-# endif /* __NR_setfsgid32 */
+/* Consider moving to syscalls.list. */
int
setfsgid (gid_t gid)
{
INTERNAL_SYSCALL_DECL (err);
-# if __ASSUME_32BITUIDS > 0
- /* No error checking. */
return INTERNAL_SYSCALL (setfsgid32, err, 1, gid);
-# else
-# ifdef __NR_setfsgid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
-
- result = INTERNAL_SYSCALL (setfsgid32, err, 1, gid);
- if (! INTERNAL_SYSCALL_ERROR_P (result, err)
- || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
- return result;
-
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setfsgid32 */
- if (gid != (gid_t) ((__kernel_gid_t) gid))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- /* No error checking. */
- return INTERNAL_SYSCALL (setfsgid, err, 1, gid);
-# endif
}
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setfsuid.c b/sysdeps/unix/sysv/linux/i386/setfsuid.c
index 5194ce1edc..3e0dc97289 100644
--- a/sysdeps/unix/sysv/linux/i386/setfsuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setfsuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,48 +23,12 @@
#include <sys/syscall.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_setfsuid
-
-# ifdef __NR_setfsuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids attribute_hidden;
-# endif
-# endif /* __NR_setfsuid32 */
+/* Consider moving to syscalls.list. */
int
setfsuid (uid_t uid)
{
INTERNAL_SYSCALL_DECL (err);
-# if __ASSUME_32BITUIDS > 0
- /* No error checking. */
return INTERNAL_SYSCALL (setfsuid32, err, 1, uid);
-# else
-# ifdef __NR_setfsuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
-
- result = INTERNAL_SYSCALL (setfsuid32, err, 1, uid);
- if (! INTERNAL_SYSCALL_ERROR_P (result, err)
- || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
- return result;
-
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setfsuid32 */
-
- if (uid != (uid_t) ((__kernel_uid_t) uid))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- /* No error checking. */
- return INTERNAL_SYSCALL (setfsuid, err, 1, uid);
-# endif
}
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setgid.c b/sysdeps/unix/sysv/linux/i386/setgid.c
index dacc41dab2..b067368209 100644
--- a/sysdeps/unix/sysv/linux/i386/setgid.c
+++ b/sysdeps/unix/sysv/linux/i386/setgid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000, 2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,54 +19,13 @@
#include <unistd.h>
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-
-
-#ifdef __NR_setgid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_setgid32 */
int
__setgid (gid_t gid)
{
int result;
-#if __ASSUME_32BITUIDS > 0
result = INLINE_SETXID_SYSCALL (setgid32, 1, gid);
-#else
-# ifdef __NR_setgid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setgid32, 1, gid);
-
- if (result == 0)
- goto out;
- if (errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setgid32 */
-
- if (gid == (gid_t) ~0
- || gid != (gid_t) ((__kernel_gid_t) gid))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SETXID_SYSCALL (setgid, 1, gid);
-# ifdef __NR_setgid32
- out:
-# endif
-#endif
return result;
}
diff --git a/sysdeps/unix/sysv/linux/i386/setgroups.c b/sysdeps/unix/sysv/linux/i386/setgroups.c
index dd74cd2864..73b341ac53 100644
--- a/sysdeps/unix/sysv/linux/i386/setgroups.c
+++ b/sysdeps/unix/sysv/linux/i386/setgroups.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,2000,2002,2004,2006,2011
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -27,16 +26,6 @@
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-
-
-#ifdef __NR_setgroups32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_setgroups32 */
/* Set the group set for the current user to GROUPS (N of them). For
Linux we must convert the array of groups into the format that the
@@ -44,47 +33,6 @@ extern int __libc_missing_32bit_uids;
int
setgroups (size_t n, const gid_t *groups)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SETXID_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
-#else
- if (n > (size_t) __sysconf (_SC_NGROUPS_MAX))
- {
- __set_errno (EINVAL);
- return -1;
- }
- else
- {
- size_t i;
- __kernel_gid_t kernel_groups[n];
-
-# ifdef __NR_setgroups32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setgroups32, 2, n,
- CHECK_N (groups, n));
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setgroups32 */
- for (i = 0; i < n; i++)
- {
- kernel_groups[i] = (__ptrvalue (groups))[i];
- if (groups[i] != (gid_t) ((__kernel_gid_t) groups[i]))
- {
- __set_errno (EINVAL);
- return -1;
- }
- }
-
- return INLINE_SETXID_SYSCALL (setgroups, 2, n,
- CHECK_N (kernel_groups, n));
- }
-#endif
}
libc_hidden_def (setgroups)
diff --git a/sysdeps/unix/sysv/linux/i386/setregid.c b/sysdeps/unix/sysv/linux/i386/setregid.c
index b48baf7b46..d2a1d55d50 100644
--- a/sysdeps/unix/sysv/linux/i386/setregid.c
+++ b/sysdeps/unix/sysv/linux/i386/setregid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,53 +19,13 @@
#include <unistd.h>
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-
-
-#ifdef __NR_setregid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_setregid32 */
int
__setregid (gid_t rgid, gid_t egid)
{
int result;
-#if __ASSUME_32BITUIDS > 0
result = INLINE_SETXID_SYSCALL (setregid32, 2, rgid, egid);
-#else
-# ifdef __NR_setregid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setregid32, 2, rgid, egid);
-
- if (result == 0)
- goto out;
- if (errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setregid32 */
- if (((rgid + 1) > (gid_t) ((__kernel_gid_t) -1U))
- || ((egid + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SETXID_SYSCALL (setregid, 2, rgid, egid);
-# ifdef __NR_setregid32
- out:
-# endif
-#endif
return result;
}
diff --git a/sysdeps/unix/sysv/linux/i386/setresgid.c b/sysdeps/unix/sysv/linux/i386/setresgid.c
index 24a0dd8eb7..569745bef2 100644
--- a/sysdeps/unix/sysv/linux/i386/setresgid.c
+++ b/sysdeps/unix/sysv/linux/i386/setresgid.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2004,2005,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,56 +19,14 @@
#include <unistd.h>
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#if defined __NR_setresgid || defined __NR_setresgid32
-
-# ifdef __NR_setresgid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-# endif /* __NR_setresgid32 */
-
int
__setresgid (gid_t rgid, gid_t egid, gid_t sgid)
{
int result;
-# if __ASSUME_32BITUIDS > 0 || !defined __NR_setresgid
result = INLINE_SETXID_SYSCALL (setresgid32, 3, rgid, egid, sgid);
-# else
-# ifdef __NR_setresgid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setresgid32, 3, rgid, egid, sgid);
- if (result == 0)
- goto out;
- if (errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setresgid32 */
-
- if (((rgid + 1) > (gid_t) ((__kernel_gid_t) -1U))
- || ((egid + 1) > (gid_t) ((__kernel_gid_t) -1U))
- || ((sgid + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SETXID_SYSCALL (setresgid, 3, rgid, egid, sgid);
-# ifdef __NR_setresgid32
- out:
-# endif
-# endif
return result;
}
@@ -77,9 +34,3 @@ libc_hidden_def (__setresgid)
#ifndef __setresgid
weak_alias (__setresgid, setresgid)
#endif
-
-#else
-
-#include <posix/setresgid.c>
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setresuid.c b/sysdeps/unix/sysv/linux/i386/setresuid.c
index 1015dd74d9..33e464b7f4 100644
--- a/sysdeps/unix/sysv/linux/i386/setresuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setresuid.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2004,2005,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,56 +19,14 @@
#include <unistd.h>
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#if defined __NR_setresuid || defined __NR_setresuid32
-
-# ifdef __NR_setresuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-# endif /* __NR_setresuid32 */
-
int
__setresuid (uid_t ruid, uid_t euid, uid_t suid)
{
int result;
-# if __ASSUME_32BITUIDS > 0 || !defined __NR_setresuid
result = INLINE_SETXID_SYSCALL (setresuid32, 3, ruid, euid, suid);
-# else
-# ifdef __NR_setresuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setresuid32, 3, ruid, euid, suid);
- if (result == 0)
- goto out;
- if (errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setresuid32 */
-
- if (((ruid + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((euid + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((suid + 1) > (uid_t) ((__kernel_uid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SETXID_SYSCALL (setresuid, 3, ruid, euid, suid);
-# ifdef __NR_setresuid32
- out:
-# endif
-# endif
return result;
}
@@ -77,9 +34,3 @@ libc_hidden_def (__setresuid)
#ifndef __setresuid
weak_alias (__setresuid, setresuid)
#endif
-
-#else
-
-#include <posix/setresuid.c>
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setreuid.c b/sysdeps/unix/sysv/linux/i386/setreuid.c
index 7c8b4af9dc..e17455f8c8 100644
--- a/sysdeps/unix/sysv/linux/i386/setreuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setreuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,53 +19,14 @@
#include <unistd.h>
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_setreuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_setreuid32 */
-
int
__setreuid (uid_t ruid, uid_t euid)
{
int result;
-#if __ASSUME_32BITUIDS > 0
result = INLINE_SETXID_SYSCALL (setreuid32, 2, ruid, euid);
-#else
-# ifdef __NR_setreuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setreuid32, 2, ruid, euid);
-
- if (result == 0)
- goto out;
- if (errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setreuid32 */
- if (((ruid + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((euid + 1) > (uid_t) ((__kernel_uid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SETXID_SYSCALL (setreuid, 2, ruid, euid);
-# ifdef __NR_setreuid32
- out:
-# endif
-#endif
return result;
}
diff --git a/sysdeps/unix/sysv/linux/i386/setuid.c b/sysdeps/unix/sysv/linux/i386/setuid.c
index 54ed9ba34a..cab40671e7 100644
--- a/sysdeps/unix/sysv/linux/i386/setuid.c
+++ b/sysdeps/unix/sysv/linux/i386/setuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,53 +19,14 @@
#include <unistd.h>
#include <setxid.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_setuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_setuid32 */
-
int
__setuid (uid_t uid)
{
int result;
-#if __ASSUME_32BITUIDS > 0 && defined __NR_setuid32
result = INLINE_SETXID_SYSCALL (setuid32, 1, uid);
-#else
-# ifdef __NR_setuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- int saved_errno = errno;
-
- result = INLINE_SETXID_SYSCALL (setuid32, 1, uid);
- if (result == 0)
- goto out;
- if (errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_setuid32 */
-
- if (uid == (uid_t) ~0
- || uid != (uid_t) ((__kernel_uid_t) uid))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SETXID_SYSCALL (setuid, 1, uid);
-# ifdef __NR_setuid32
- out:
-# endif
-#endif
return result;
}
diff --git a/sysdeps/unix/sysv/linux/i386/shmctl.c b/sysdeps/unix/sysv/linux/i386/shmctl.c
index fb38ed79cd..dd2167d9a7 100644
--- a/sysdeps/unix/sysv/linux/i386/shmctl.c
+++ b/sysdeps/unix/sysv/linux/i386/shmctl.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1997,1998,2000,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -26,7 +26,6 @@
#include <bits/wordsize.h>
#include <bp-checks.h>
-#include <kernel-features.h>
#include <shlib-compat.h>
struct __old_shmid_ds
@@ -53,14 +52,6 @@ struct __old_shminfo
int shmall;
};
-#ifdef __NR_getuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif
-
/* Provide operations to control over shared memory segments. */
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int __old_shmctl (int, int, struct __old_shmid_ds *);
@@ -81,97 +72,8 @@ compat_symbol (libc, __old_shmctl, shmctl, GLIBC_2_0);
int
__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl,
shmid, cmd | __IPC_64, 0, CHECK_1 (buf));
-#else
- switch (cmd) {
- case SHM_STAT:
- case IPC_STAT:
- case IPC_SET:
-# if __WORDSIZE != 32
- case IPC_INFO:
-# endif
- break;
- default:
- return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl,
- shmid, cmd, 0, CHECK_1 (buf));
- }
-
- {
- struct __old_shmid_ds old;
- int result;
-
-# ifdef __NR_getuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- if (__libc_missing_32bit_uids < 0)
- {
- int save_errno = errno;
-
- /* Test presence of new IPC by testing for getuid32 syscall. */
- result = INLINE_SYSCALL (getuid32, 0);
- if (result == -1 && errno == ENOSYS)
- __libc_missing_32bit_uids = 1;
- else
- __libc_missing_32bit_uids = 0;
- __set_errno(save_errno);
- }
- if (__libc_missing_32bit_uids <= 0)
- return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl,
- shmid, cmd | __IPC_64, 0, CHECK_1 (buf));
- }
-# endif
-
- if (cmd == IPC_SET)
- {
- old.shm_perm.uid = buf->shm_perm.uid;
- old.shm_perm.gid = buf->shm_perm.gid;
- old.shm_perm.mode = buf->shm_perm.mode;
- if (old.shm_perm.uid != buf->shm_perm.uid ||
- old.shm_perm.gid != buf->shm_perm.gid)
- {
- __set_errno (EINVAL);
- return -1;
- }
- }
- result = INLINE_SYSCALL (ipc, 5, IPCOP_shmctl,
- shmid, cmd, 0, __ptrvalue (&old));
- if (result != -1 && (cmd == SHM_STAT || cmd == IPC_STAT))
- {
- memset(buf, 0, sizeof(*buf));
- buf->shm_perm.__key = old.shm_perm.__key;
- buf->shm_perm.uid = old.shm_perm.uid;
- buf->shm_perm.gid = old.shm_perm.gid;
- buf->shm_perm.cuid = old.shm_perm.cuid;
- buf->shm_perm.cgid = old.shm_perm.cgid;
- buf->shm_perm.mode = old.shm_perm.mode;
- buf->shm_perm.__seq = old.shm_perm.__seq;
- buf->shm_atime = old.shm_atime;
- buf->shm_dtime = old.shm_dtime;
- buf->shm_ctime = old.shm_ctime;
- buf->shm_segsz = old.shm_segsz;
- buf->shm_nattch = old.shm_nattch;
- buf->shm_cpid = old.shm_cpid;
- buf->shm_lpid = old.shm_lpid;
- }
-# if __WORDSIZE != 32
- else if (result != -1 && cmd == IPC_INFO)
- {
- struct __old_shminfo *oldi = (struct __old_shminfo *)&old;
- struct shminfo *i = (struct shminfo *)buf;
-
- memset(i, 0, sizeof(*i));
- i->shmmax = oldi->shmmax;
- i->shmmin = oldi->shmmin;
- i->shmmni = oldi->shmmni;
- i->shmseg = oldi->shmseg;
- i->shmall = oldi->shmall;
- }
-# endif
- return result;
- }
-#endif
}
versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 1090f8a809..fd2f1dbd01 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -37,91 +37,58 @@
introduced. If somebody cares these values can afterwards be
corrected. */
-/* When did the `setresuid' syscall became available? By 2.2.0 except
- on SPARC. */
-#if !defined __sparc__
-# define __ASSUME_SETRESUID_SYSCALL 1
-#endif
-
/* The sendfile syscall was introduced in 2.2.0. */
#define __ASSUME_SENDFILE 1
/* On x86 another `getrlimit' syscall was added in 2.3.25. */
-#if __LINUX_KERNEL_VERSION >= 131865 && defined __i386__
+#ifdef __i386__
# define __ASSUME_NEW_GETRLIMIT_SYSCALL 1
#endif
/* On x86 the truncate64/ftruncate64 syscalls were introduced in 2.3.31. */
-#if __LINUX_KERNEL_VERSION >= 131871 && defined __i386__
+#ifdef __i386__
# define __ASSUME_TRUNCATE64_SYSCALL 1
#endif
/* On x86 the mmap2 syscall was introduced in 2.3.31. */
-#if __LINUX_KERNEL_VERSION >= 131871 && defined __i386__
+#ifdef __i386__
# define __ASSUME_MMAP2_SYSCALL 1
#endif
/* On x86 the stat64/lstat64/fstat64 syscalls were introduced in 2.3.34. */
-#if __LINUX_KERNEL_VERSION >= 131874 && defined __i386__
+#ifdef __i386__
# define __ASSUME_STAT64_SYSCALL 1
#endif
/* On sparc the truncate64/ftruncate64/mmap2/stat64/lstat64/fstat64
syscalls were introduced in 2.3.35. */
-#if __LINUX_KERNEL_VERSION >= 131875 \
- && (defined __sparc__ && !defined __arch64__)
+#if defined __sparc__ && !defined __arch64__
# define __ASSUME_TRUNCATE64_SYSCALL 1
# define __ASSUME_MMAP2_SYSCALL 1
# define __ASSUME_STAT64_SYSCALL 1
#endif
/* I know for sure that getrlimit are in 2.3.35 on powerpc. */
-#if __LINUX_KERNEL_VERSION >= 131875 && defined __powerpc__
+#ifdef __powerpc__
# define __ASSUME_NEW_GETRLIMIT_SYSCALL 1
#endif
/* I know for sure that these are in 2.3.35 on powerpc. But PowerPC64 does not
support separate 64-bit syscalls, already 64-bit. */
-#if __LINUX_KERNEL_VERSION >= 131875 && defined __powerpc__ \
- && !defined __powerpc64__
+#if defined __powerpc__ && !defined __powerpc64__
# define __ASSUME_TRUNCATE64_SYSCALL 1
# define __ASSUME_STAT64_SYSCALL 1
#endif
-/* Linux 2.3.39 introduced 32bit UID/GIDs. Some platforms had 32
- bit type all along. */
-#if __LINUX_KERNEL_VERSION >= 131879 || defined __powerpc__
-# define __ASSUME_32BITUIDS 1
-#endif
-
-/* Linux 2.3.39 sparc added setresuid. */
-#if __LINUX_KERNEL_VERSION >= 131879 && defined __sparc__
-# define __ASSUME_SETRESUID_SYSCALL 1
-#endif
-
-#if __LINUX_KERNEL_VERSION >= 131879
-# define __ASSUME_SETRESGID_SYSCALL 1
-#endif
-
-/* Linux 2.3.39 introduced IPC64. Except for powerpc. */
-#if __LINUX_KERNEL_VERSION >= 131879 && !defined __powerpc__
+/* Linux 2.3.39 introduced IPC64. Except for powerpc. Linux 2.4.0 on
+ PPC introduced a correct IPC64. But PowerPC64 does not support a
+ separate 64-bit syscall, already 64-bit. */
+#ifndef __powerpc64__
# define __ASSUME_IPC64 1
#endif
-/* We can use the LDTs for threading with Linux 2.3.99 and newer. */
-#if __LINUX_KERNEL_VERSION >= 131939
-# define __ASSUME_LDT_WORKS 1
-#endif
-
-/* Linux 2.4.0 on PPC introduced a correct IPC64. But PowerPC64 does not
- support a separate 64-bit syscall, already 64-bit. */
-#if __LINUX_KERNEL_VERSION >= 132096 && defined __powerpc__ \
- && !defined __powerpc64__
-# define __ASSUME_IPC64 1
-#endif
-
/* SH kernels got stat64, mmap2, and truncate64 during 2.4.0-test. */
-#if __LINUX_KERNEL_VERSION >= 132096 && defined __sh__
+#ifdef __sh__
# define __ASSUME_TRUNCATE64_SYSCALL 1
# define __ASSUME_MMAP2_SYSCALL 1
# define __ASSUME_STAT64_SYSCALL 1
@@ -163,12 +130,6 @@
# define __ASSUME_GETDENTS64_SYSCALL 1
#endif
-/* When did O_DIRECTORY become available? Early in 2.3 but when?
- Be safe, use 2.3.99. */
-#if __LINUX_KERNEL_VERSION >= 131939
-# define __ASSUME_O_DIRECTORY 1
-#endif
-
/* Starting with one of the 2.4.0 pre-releases the Linux kernel passes
up the page size information. */
#if __LINUX_KERNEL_VERSION >= 132097
diff --git a/sysdeps/unix/sysv/linux/local-setxid.h b/sysdeps/unix/sysv/linux/local-setxid.h
index 0579687982..97d787d942 100644
--- a/sysdeps/unix/sysv/linux/local-setxid.h
+++ b/sysdeps/unix/sysv/linux/local-setxid.h
@@ -1,23 +1,16 @@
/* SETxID functions which only have to change the local thread and
none of the possible other threads. */
-#include <kernel-features.h>
#include <sysdep.h>
-/* If we can use the syscall directly, use it. */
-#if __ASSUME_32BITUIDS > 0 && defined __NR_setresuid32
+#ifdef __NR_setresuid32
# define local_seteuid(id) INLINE_SYSCALL (setresuid32, 3, -1, id, -1)
-#elif __ASSUME_SETRESUID_SYSCALL > 0
-# define local_seteuid(id) INLINE_SYSCALL (setresuid, 3, -1, id, -1)
#else
-# define local_seteuid(id) seteuid (id)
+# define local_seteuid(id) INLINE_SYSCALL (setresuid, 3, -1, id, -1)
#endif
-/* If we can use the syscall directly, use it. */
-#if __ASSUME_32BITUIDS > 0 && defined __NR_setresgid32
+#ifdef __NR_setresgid32
# define local_setegid(id) INLINE_SYSCALL (setresgid32, 3, -1, id, -1)
-#elif __ASSUME_SETRESGID_SYSCALL > 0
-# define local_setegid(id) INLINE_SYSCALL (setresgid, 3, -1, id, -1)
#else
-# define local_setegid(id) setegid (id)
+# define local_setegid(id) INLINE_SYSCALL (setresgid, 3, -1, id, -1)
#endif
diff --git a/sysdeps/unix/sysv/linux/opendir.c b/sysdeps/unix/sysv/linux/opendir.c
index 2c6c557a09..b0bb80d397 100644
--- a/sysdeps/unix/sysv/linux/opendir.c
+++ b/sysdeps/unix/sysv/linux/opendir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -15,11 +15,6 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <kernel-features.h>
-
-
-#ifdef __ASSUME_O_DIRECTORY
-# define O_DIRECTORY_WORKS 1
-#endif
+#define O_DIRECTORY_WORKS 1
#include <sysdeps/unix/opendir.c>
diff --git a/sysdeps/unix/sysv/linux/opensock.c b/sysdeps/unix/sysv/linux/opensock.c
index 5959380621..d4674229ea 100644
--- a/sysdeps/unix/sysv/linux/opensock.c
+++ b/sysdeps/unix/sysv/linux/opensock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -36,15 +36,8 @@ __opensock (void)
const char procname[15];
} afs[] =
{
- /* The 2.2 kernels cannot handle ioctl(SIOCGIFCONF) on AF_UNIX sockets.
- Give the kernel a chance to user inet sockets on old kernels. */
-#if __LINUX_KERNEL_VERSION < 132096
- { AF_INET, "" },
- { AF_UNIX, "net/unix" },
-#else
{ AF_UNIX, "net/unix" },
{ AF_INET, "" },
-#endif
{ AF_INET6, "net/if_inet6" },
{ AF_AX25, "net/ax25" },
{ AF_NETROM, "net/nr" },
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/chown.c b/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
index bc471454e4..cc0503cbca 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000,2001,2002,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -24,7 +24,6 @@
#include <bp-checks.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
/*
In Linux 2.1.x the chown functions have been changed. A new function lchown
@@ -38,58 +37,12 @@
/* Running under Linux > 2.1.80. */
-#ifdef __NR_chown32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_chown32 */
+/* Consider moving to syscalls.list. */
int
__real_chown (const char *file, uid_t owner, gid_t group)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
-#else
- static int __libc_old_chown;
- int result;
-
- if (!__libc_old_chown)
- {
- int saved_errno = errno;
-# ifdef __NR_chown32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_chown32 */
- if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- result = INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
-
- if (result >= 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_old_chown = 1;
- }
-
- return __lchown (file, owner, group);
-#endif
}
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c b/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
index 754245a8fd..6190d02a6f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,46 +23,13 @@
#include <bp-checks.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-# ifdef __NR_lchown32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-# endif /* __NR_lchown32 */
+/* Consider moving to syscalls.list. */
int
__lchown (const char *file, uid_t owner, gid_t group)
{
-# if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group);
-# else
-# ifdef __NR_lchown32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (lchown32, 3, CHECK_STRING (file), owner, group);
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_lchown32 */
-
- if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
- || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- return INLINE_SYSCALL (lchown, 3, CHECK_STRING (file), owner, group);
-# endif
}
weak_alias (__lchown, lchown)
diff --git a/sysdeps/unix/sysv/linux/setegid.c b/sysdeps/unix/sysv/linux/setegid.c
index bc26c99ef7..5ed44ed70f 100644
--- a/sysdeps/unix/sysv/linux/setegid.c
+++ b/sysdeps/unix/sysv/linux/setegid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,13 +18,8 @@
#include <errno.h>
#include <unistd.h>
#include <setxid.h>
-#include <kernel-features.h>
-#if defined __NR_setresgid || __ASSUME_SETRESGID_SYSCALL > 0
-
-extern int __setresgid (gid_t rgid, gid_t egid, gid_t sgid);
-
int
setegid (gid_t gid)
{
@@ -36,25 +31,14 @@ setegid (gid_t gid)
return -1;
}
-# if __ASSUME_32BITUIDS > 0 && defined __NR_setresgid32
+#ifdef __NR_setresgid32
result = INLINE_SETXID_SYSCALL (setresgid32, 3, -1, gid, -1);
-# else
- /* First try the syscall. */
+#else
result = INLINE_SETXID_SYSCALL (setresgid, 3, -1, gid, -1);
-# if __ASSUME_SETRESGID_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use emulation. This may not work
- since `setregid' also sets the saved group ID when GID is not
- equal to the real group ID, making it impossible to switch back. */
- result = __setregid (-1, gid);
-# endif
-# endif
+#endif
return result;
}
#ifndef setegid
libc_hidden_def (setegid)
#endif
-#else
-# include <sysdeps/unix/bsd/setegid.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/seteuid.c b/sysdeps/unix/sysv/linux/seteuid.c
index 21625b406f..e9bd82d86e 100644
--- a/sysdeps/unix/sysv/linux/seteuid.c
+++ b/sysdeps/unix/sysv/linux/seteuid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,1999,2002,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,13 +18,8 @@
#include <errno.h>
#include <unistd.h>
#include <setxid.h>
-#include <kernel-features.h>
-#if defined __NR_setresuid || __ASSUME_SETRESUID_SYSCALL > 0
-
-extern int __setresuid (uid_t ruid, uid_t euid, uid_t suid);
-
int
seteuid (uid_t uid)
{
@@ -36,25 +31,14 @@ seteuid (uid_t uid)
return -1;
}
-# if __ASSUME_32BITUIDS > 0 && defined __NR_setresuid32
+#ifdef __NR_setresuid32
result = INLINE_SETXID_SYSCALL (setresuid32, 3, -1, uid, -1);
-# else
- /* First try the syscall. */
+#else
result = INLINE_SETXID_SYSCALL (setresuid, 3, -1, uid, -1);
-# if __ASSUME_SETRESUID_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use emulation. This may not work
- since `setreuid' also sets the saved user ID when UID is not
- equal to the real user ID, making it impossible to switch back. */
- result = __setreuid (-1, uid);
-# endif
-# endif
+#endif
return result;
}
#ifndef seteuid
libc_hidden_def (seteuid)
#endif
-#else
-# include <sysdeps/unix/bsd/seteuid.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/chown.c b/sysdeps/unix/sysv/linux/sh/chown.c
index 72582b9a43..5ae94b6b25 100644
--- a/sysdeps/unix/sysv/linux/sh/chown.c
+++ b/sysdeps/unix/sysv/linux/sh/chown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2000,2002,2003,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,46 +23,13 @@
#include <bp-checks.h>
#include <linux/posix_types.h>
-#include <kernel-features.h>
-#ifdef __NR_chown32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif /* __NR_chown32 */
+/* Consider moving to syscalls.list. */
int
__chown (const char *file, uid_t owner, gid_t group)
{
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
-#else
-# ifdef __NR_chown32
- if (__libc_missing_32bit_uids <= 0)
- {
- int result;
- int saved_errno = errno;
-
- result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
- if (result == 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_32bit_uids = 1;
- }
-# endif /* __NR_chown32 */
-
- if (((owner + 1) > (gid_t) ((__kernel_uid_t) -1U))
- || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
-#endif
}
libc_hidden_def (__chown)
weak_alias (__chown, chown)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c b/sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c
index 87cb23a517..464f0b502d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c
@@ -1,6 +1,5 @@
/* Semctl for architectures where word sized unions are passed indirectly
- Copyright (C) 1995,1997,1998,2000,2002,2003,2004,2006
- Free Software Foundation, Inc.
+ Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
@@ -27,7 +26,6 @@
#include <string.h>
#include <sys/syscall.h>
-#include <kernel-features.h>
#include <shlib-compat.h>
struct __old_semid_ds
@@ -55,14 +53,6 @@ union semun
#include <bp-checks.h>
#include <bp-semctl.h> /* definition of CHECK_SEMCTL needs union semum */
-#ifdef __NR_getuid32
-# if __ASSUME_32BITUIDS == 0
-/* This variable is shared with all files that need to check for 32bit
- uids. */
-extern int __libc_missing_32bit_uids;
-# endif
-#endif
-
/* Return identifier for array of NSEMS semaphores associated with
KEY. */
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
@@ -126,82 +116,8 @@ __new_semctl (int semid, int semnum, int cmd, ...)
break;
}
-#if __ASSUME_32BITUIDS > 0
return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
-#else
- switch (cmd) {
- case SEM_STAT:
- case IPC_STAT:
- case IPC_SET:
- break;
- default:
- return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd,
- CHECK_SEMCTL (&arg, semid, cmd));
- }
-
- {
- int result;
- struct __old_semid_ds old;
- struct semid_ds *buf;
-
-#ifdef __NR_getuid32
- if (__libc_missing_32bit_uids <= 0)
- {
- if (__libc_missing_32bit_uids < 0)
- {
- int save_errno = errno;
-
- /* Test presence of new IPC by testing for getuid32 syscall. */
- result = INLINE_SYSCALL (getuid32, 0);
- if (result == -1 && errno == ENOSYS)
- __libc_missing_32bit_uids = 1;
- else
- __libc_missing_32bit_uids = 0;
- __set_errno(save_errno);
- }
- if (__libc_missing_32bit_uids <= 0)
- {
- result = INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
- CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
- return result;
- }
- }
-#endif
-
- buf = arg.buf;
- arg.__old_buf = &old;
- if (cmd == IPC_SET)
- {
- old.sem_perm.uid = buf->sem_perm.uid;
- old.sem_perm.gid = buf->sem_perm.gid;
- old.sem_perm.mode = buf->sem_perm.mode;
- if (old.sem_perm.uid != buf->sem_perm.uid ||
- old.sem_perm.gid != buf->sem_perm.gid)
- {
- __set_errno (EINVAL);
- return -1;
- }
- }
- result = INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd,
- CHECK_SEMCTL (&arg, semid, cmd));
- if (result != -1 && cmd != IPC_SET)
- {
- memset(buf, 0, sizeof(*buf));
- buf->sem_perm.__key = old.sem_perm.__key;
- buf->sem_perm.uid = old.sem_perm.uid;
- buf->sem_perm.gid = old.sem_perm.gid;
- buf->sem_perm.cuid = old.sem_perm.cuid;
- buf->sem_perm.cgid = old.sem_perm.cgid;
- buf->sem_perm.mode = old.sem_perm.mode;
- buf->sem_perm.__seq = old.sem_perm.__seq;
- buf->sem_otime = old.sem_otime;
- buf->sem_ctime = old.sem_ctime;
- buf->sem_nsems = old.sem_nsems;
- }
- return result;
- }
-#endif
}
versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);