1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-24 17:51:17 +03:00

Remove pre-2.2 Linux kernel support.

This commit is contained in:
Joseph Myers
2012-05-14 14:11:02 +00:00
parent 1bfb72913b
commit ffb7875d03
40 changed files with 333 additions and 1447 deletions

View File

@@ -1,5 +1,4 @@
/* Copyright (C) 1998,1999,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
@@ -42,64 +41,22 @@ extern int __chown_is_lchown (const char *__file, uid_t __owner,
extern int __real_chown (const char *__file, uid_t __owner, gid_t __group);
#if defined __NR_lchown || __ASSUME_LCHOWN_SYSCALL > 0
/* Running under Linux > 2.1.80. */
# ifdef __NR_chown32
#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 */
# endif
#endif /* __NR_chown32 */
int
__real_chown (const char *file, uid_t owner, gid_t group)
{
# if __ASSUME_LCHOWN_SYSCALL == 0
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);
# elif __ASSUME_32BITUIDS
/* This implies __ASSUME_LCHOWN_SYSCALL. */
#if __ASSUME_32BITUIDS
return INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
# else
/* !__ASSUME_32BITUIDS && ASSUME_LCHOWN_SYSCALL */
# ifdef __NR_chown32
#else
/* !__ASSUME_32BITUIDS */
# ifdef __NR_chown32
if (__libc_missing_32bit_uids <= 0)
{
int result;
@@ -112,7 +69,7 @@ __real_chown (const char *file, uid_t owner, gid_t group)
__set_errno (saved_errno);
__libc_missing_32bit_uids = 1;
}
# endif /* __NR_chown32 */
# endif /* __NR_chown32 */
if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
|| ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
{
@@ -121,19 +78,11 @@ __real_chown (const char *file, uid_t owner, gid_t group)
}
return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
# endif
}
#endif
#if !defined __NR_lchown && __ASSUME_LCHOWN_SYSCALL == 0
/* Compiling under older kernels. */
int
__chown_is_lchown (const char *file, uid_t owner, gid_t group)
{
return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
}
#elif SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
/* Compiling for compatibiity. */
int
attribute_compat_text_section
@@ -147,12 +96,6 @@ __chown_is_lchown (const char *file, uid_t owner, gid_t group)
compat_symbol (libc, __chown_is_lchown, chown, GLIBC_2_0);
#endif
#ifdef __NR_lchown
versioned_symbol (libc, __real_chown, chown, GLIBC_2_1);
strong_alias (__real_chown, __chown)
#else
strong_alias (__chown_is_lchown, __chown_is_lchown21)
versioned_symbol (libc, __chown_is_lchown21, chown, GLIBC_2_1);
strong_alias (__chown_is_lchown, __chown)
#endif
libc_hidden_def (__chown)