aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/configure10
-rw-r--r--sysdeps/unix/sysv/linux/configure.in10
-rw-r--r--sysdeps/unix/sysv/linux/getcwd.c169
-rw-r--r--sysdeps/unix/sysv/linux/i386/chown.c79
-rw-r--r--sysdeps/unix/sysv/linux/i386/fchownat.c3
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigaction.c101
-rw-r--r--sysdeps/unix/sysv/linux/if_index.c201
-rw-r--r--sysdeps/unix/sysv/linux/ifreq.c57
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h54
-rw-r--r--sysdeps/unix/sysv/linux/poll.c61
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/chown.c90
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/fchownat.c12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c29
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c28
-rw-r--r--sysdeps/unix/sysv/linux/pread.c23
-rw-r--r--sysdeps/unix/sysv/linux/pread64.c24
-rw-r--r--sysdeps/unix/sysv/linux/ptsname.c8
-rw-r--r--sysdeps/unix/sysv/linux/pwrite.c23
-rw-r--r--sysdeps/unix/sysv/linux/pwrite64.c24
-rw-r--r--sysdeps/unix/sysv/linux/sh/pread.c29
-rw-r--r--sysdeps/unix/sysv/linux/sh/pread64.c29
-rw-r--r--sysdeps/unix/sysv/linux/sh/pwrite.c29
-rw-r--r--sysdeps/unix/sysv/linux/sh/pwrite64.c29
-rw-r--r--sysdeps/unix/sysv/linux/sigaction.c99
-rw-r--r--sysdeps/unix/sysv/linux/sigpending.c29
-rw-r--r--sysdeps/unix/sysv/linux/sigprocmask.c31
-rw-r--r--sysdeps/unix/sysv/linux/sigsuspend.c33
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c106
-rw-r--r--sysdeps/unix/sysv/linux/syslog.c8
-rw-r--r--sysdeps/unix/sysv/linux/testrtsig.h8
-rw-r--r--sysdeps/unix/sysv/linux/ttyname.c10
-rw-r--r--sysdeps/unix/sysv/linux/ttyname_r.c10
38 files changed, 191 insertions, 1433 deletions
diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
index d571d0b62b..8235068a18 100644
--- a/sysdeps/unix/sysv/linux/configure
+++ b/sysdeps/unix/sysv/linux/configure
@@ -284,11 +284,11 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in
i386*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
powerpc/powerpc64)
arch_minimum_kernel=2.4.21
@@ -311,13 +311,13 @@ case "$machine" in
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
x86_64*)
arch_minimum_kernel=2.4.0
;;
*)
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
esac
if test -n "$minimum_kernel"; then
@@ -331,7 +331,7 @@ $as_echo "$as_me: WARNING: minimum kernel version reset to $arch_minimum_kernel"
minimum_kernel=$arch_minimum_kernel
fi
else
- if test $arch_minimum_kernel != '2.0.10'; then
+ if test $arch_minimum_kernel != '2.2.0'; then
minimum_kernel=$arch_minimum_kernel
fi
fi
diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in
index 916d64a605..1ce14f294f 100644
--- a/sysdeps/unix/sysv/linux/configure.in
+++ b/sysdeps/unix/sysv/linux/configure.in
@@ -41,11 +41,11 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in
i386*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
powerpc/powerpc64)
arch_minimum_kernel=2.4.21
@@ -68,13 +68,13 @@ case "$machine" in
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
x86_64*)
arch_minimum_kernel=2.4.0
;;
*)
- arch_minimum_kernel=2.0.10
+ arch_minimum_kernel=2.2.0
;;
esac
if test -n "$minimum_kernel"; then
@@ -87,7 +87,7 @@ if test -n "$minimum_kernel"; then
minimum_kernel=$arch_minimum_kernel
fi
else
- if test $arch_minimum_kernel != '2.0.10'; then
+ if test $arch_minimum_kernel != '2.2.0'; then
minimum_kernel=$arch_minimum_kernel
fi
fi
diff --git a/sysdeps/unix/sysv/linux/getcwd.c b/sysdeps/unix/sysv/linux/getcwd.c
index 6e3c5e0644..8f884808c3 100644
--- a/sysdeps/unix/sysv/linux/getcwd.c
+++ b/sysdeps/unix/sysv/linux/getcwd.c
@@ -38,27 +38,6 @@
#endif
-#if __ASSUME_GETCWD_SYSCALL > 0
-/* Kernel 2.1.92 introduced a third way to get the current working
- directory: a syscall. We've got to be careful that even when
- compiling under 2.1.92+ the libc still runs under older kernels. */
-# define no_syscall_getcwd 0
-# define have_new_dcache 1
-#else
-# if __NR_getcwd
-/* Kernel 2.1.92 introduced a third way to get the current working
- directory: a syscall. We've got to be careful that even when
- compiling under 2.1.92+ the libc still runs under older kernels.
- An additional problem is that the system call does not return
- the path of directories longer than one page. */
-static int no_syscall_getcwd;
-static int have_new_dcache;
-# else
-# define no_syscall_getcwd 1
-static int have_new_dcache = 1;
-# endif
-#endif
-
/* The "proc" filesystem provides an easy method to retrieve the value.
For each process, the corresponding directory contains a symbolic link
named `cwd'. Reading the content of this link immediate gives us the
@@ -73,9 +52,6 @@ __getcwd (char *buf, size_t size)
int n;
char *result;
- if (no_syscall_getcwd && !have_new_dcache)
- return generic_getcwd (buf, size);
-
#ifndef NO_ALLOCATION
size_t alloc_size = size;
if (size == 0)
@@ -101,138 +77,59 @@ __getcwd (char *buf, size_t size)
#endif
path = buf;
-#if defined __NR_getcwd || __LINUX_GETCWD_SYSCALL > 0
- if (!no_syscall_getcwd)
- {
- int retval;
-
- retval = INLINE_SYSCALL (getcwd, 2, CHECK_STRING (path), alloc_size);
- if (retval >= 0)
- {
-# ifndef NO_ALLOCATION
- if (buf == NULL && size == 0)
- /* Ensure that the buffer is only as large as necessary. */
- buf = realloc (path, (size_t) retval);
-
- if (buf == NULL)
- /* Either buf was NULL all along, or `realloc' failed but
- we still have the original string. */
- buf = path;
-# endif
-
- return buf;
- }
-
- /* The system call cannot handle paths longer than a page.
- Neither can the magic symlink in /proc/self. Just use the
- generic implementation right away. */
- if (errno == ENAMETOOLONG)
- {
-# ifndef NO_ALLOCATION
- if (buf == NULL && size == 0)
- {
- free (path);
- path = NULL;
- }
-# endif
-
- result = generic_getcwd (path, size);
-
-# ifndef NO_ALLOCATION
- if (result == NULL && buf == NULL && size != 0)
- free (path);
-# endif
-
- return result;
- }
+ int retval;
-# if __ASSUME_GETCWD_SYSCALL
- /* It should never happen that the `getcwd' syscall failed because
- the buffer is too small if we allocated the buffer ourselves
- large enough. */
- assert (errno != ERANGE || buf != NULL || size != 0);
+ retval = INLINE_SYSCALL (getcwd, 2, CHECK_STRING (path), alloc_size);
+ if (retval >= 0)
+ {
+#ifndef NO_ALLOCATION
+ if (buf == NULL && size == 0)
+ /* Ensure that the buffer is only as large as necessary. */
+ buf = realloc (path, (size_t) retval);
-# ifndef NO_ALLOCATION
if (buf == NULL)
- free (path);
-# endif
+ /* Either buf was NULL all along, or `realloc' failed but
+ we still have the original string. */
+ buf = path;
+#endif
- return NULL;
-# else
- if (errno == ENOSYS)
- {
- no_syscall_getcwd = 1;
- have_new_dcache = 1; /* Now we will try the /proc method. */
- }
- else if (errno != ERANGE || buf != NULL)
- {
-# ifndef NO_ALLOCATION
- if (buf == NULL)
- free (path);
-# endif
- return NULL;
- }
-# endif
+ return buf;
}
-#endif
- n = __readlink ("/proc/self/cwd", path, alloc_size - 1);
- if (n != -1)
+ /* The system call cannot handle paths longer than a page.
+ Neither can the magic symlink in /proc/self. Just use the
+ generic implementation right away. */
+ if (errno == ENAMETOOLONG)
{
- if (path[0] == '/')
- {
- if ((size_t) n >= alloc_size - 1)
- {
#ifndef NO_ALLOCATION
- if (buf == NULL)
- free (path);
-#endif
- return NULL;
- }
-
- path[n] = '\0';
-#ifndef NO_ALLOCATION
- if (buf == NULL && size == 0)
- /* Ensure that the buffer is only as large as necessary. */
- buf = realloc (path, (size_t) n + 1);
- if (buf == NULL)
- /* Either buf was NULL all along, or `realloc' failed but
- we still have the original string. */
- buf = path;
-#endif
-
- return buf;
+ if (buf == NULL && size == 0)
+ {
+ free (path);
+ path = NULL;
}
-#ifndef have_new_dcache
- else
- have_new_dcache = 0;
#endif
- }
-#if __ASSUME_GETCWD_SYSCALL == 0
- /* Set to have_new_dcache only if error indicates that proc doesn't
- exist. */
- if (errno != EACCES && errno != ENAMETOOLONG)
- have_new_dcache = 0;
-#endif
+ result = generic_getcwd (path, size);
#ifndef NO_ALLOCATION
- /* Don't put restrictions on the length of the path unless the user does. */
- if (buf == NULL && size == 0)
- {
- free (path);
- path = NULL;
- }
+ if (result == NULL && buf == NULL && size != 0)
+ free (path);
#endif
- result = generic_getcwd (path, size);
+ return result;
+ }
+
+ /* It should never happen that the `getcwd' syscall failed because
+ the buffer is too small if we allocated the buffer ourselves
+ large enough. */
+ assert (errno != ERANGE || buf != NULL || size != 0);
#ifndef NO_ALLOCATION
- if (result == NULL && buf == NULL && size != 0)
+ if (buf == NULL)
free (path);
#endif
- return result;
+ return NULL;
}
weak_alias (__getcwd, getcwd)
diff --git a/sysdeps/unix/sysv/linux/i386/chown.c b/sysdeps/unix/sysv/linux/i386/chown.c
index b87605f602..c8e53e4e00 100644
--- a/sysdeps/unix/sysv/linux/i386/chown.c
+++ b/sysdeps/unix/sysv/linux/i386/chown.c
@@ -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)
diff --git a/sysdeps/unix/sysv/linux/i386/fchownat.c b/sysdeps/unix/sysv/linux/i386/fchownat.c
index 573a9b33c8..6b748d16ba 100644
--- a/sysdeps/unix/sysv/linux/i386/fchownat.c
+++ b/sysdeps/unix/sysv/linux/i386/fchownat.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2005-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
@@ -84,7 +84,6 @@ fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag)
}
# if __ASSUME_32BITUIDS > 0
- /* This implies __ASSUME_LCHOWN_SYSCALL. */
INTERNAL_SYSCALL_DECL (err);
if (flag & AT_SYMLINK_NOFOLLOW)
diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c
index 6424c7c24b..df5c235e5a 100644
--- a/sysdeps/unix/sysv/linux/i386/sigaction.c
+++ b/sysdeps/unix/sysv/linux/i386/sigaction.c
@@ -1,5 +1,5 @@
/* POSIX.1 `sigaction' call for Linux/i386.
- Copyright (C) 1991,1995-2000,2002-2005,2006 Free Software Foundation, Inc.
+ Copyright (C) 1991-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
@@ -37,12 +37,6 @@
#define SA_RESTORER 0x04000000
-#if __ASSUME_REALTIME_SIGNALS == 0
-/* The variable is shared between all wrappers around signal handling
- functions which have RT equivalents. */
-int __libc_missing_rt_sigs;
-#endif
-
/* Using the hidden attribute here does not change the code but it
helps to avoid warnings. */
#ifdef __NR_rt_sigaction
@@ -56,92 +50,39 @@ extern void restore (void) asm ("__restore") attribute_hidden;
int
__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
{
-#if __ASSUME_REALTIME_SIGNALS == 0
- struct old_kernel_sigaction k_newact, k_oldact;
-#endif
int result;
-#ifdef __NR_rt_sigaction
+ struct kernel_sigaction kact, koact;
- /* First try the RT signals. */
-# if __ASSUME_REALTIME_SIGNALS == 0
- if (!__libc_missing_rt_sigs)
-# endif
+ if (act)
{
- struct kernel_sigaction kact, koact;
-# if __ASSUME_REALTIME_SIGNALS == 0
- int saved_errno = errno;
-# endif
+ kact.k_sa_handler = act->sa_handler;
+ kact.sa_flags = act->sa_flags;
+ memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
- if (act)
+ if (GLRO(dl_sysinfo_dso) == NULL)
{
- kact.k_sa_handler = act->sa_handler;
- kact.sa_flags = act->sa_flags;
- memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
+ kact.sa_flags |= SA_RESTORER;
- if (GLRO(dl_sysinfo_dso) == NULL)
- {
- kact.sa_flags |= SA_RESTORER;
-
- kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
- ? &restore_rt : &restore);
- }
- }
-
- /* XXX The size argument hopefully will have to be changed to the
- real size of the user-level sigset_t. */
- result = INLINE_SYSCALL (rt_sigaction, 4,
- sig, act ? __ptrvalue (&kact) : NULL,
- oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
-
-# if __ASSUME_REALTIME_SIGNALS == 0
- if (result >= 0 || errno != ENOSYS)
-# endif
- {
- if (oact && result >= 0)
- {
- oact->sa_handler = koact.k_sa_handler;
- memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
- oact->sa_flags = koact.sa_flags;
- oact->sa_restorer = koact.sa_restorer;
- }
- return result;
+ kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
+ ? &restore_rt : &restore);
}
-
-# if __ASSUME_REALTIME_SIGNALS == 0
- __set_errno (saved_errno);
- __libc_missing_rt_sigs = 1;
-# endif
- }
-#endif
-
-#if __ASSUME_REALTIME_SIGNALS == 0
- if (act)
- {
- k_newact.k_sa_handler = act->sa_handler;
- k_newact.sa_mask = act->sa_mask.__val[0];
- k_newact.sa_flags = act->sa_flags | SA_RESTORER;
-
- k_newact.sa_restorer = &restore;
}
- result = INLINE_SYSCALL (sigaction, 3, sig,
- act ? __ptrvalue (&k_newact) : 0,
- oact ? __ptrvalue (&k_oldact) : 0);
-
- if (result < 0)
- return -1;
+ /* XXX The size argument hopefully will have to be changed to the
+ real size of the user-level sigset_t. */
+ result = INLINE_SYSCALL (rt_sigaction, 4,
+ sig, act ? __ptrvalue (&kact) : NULL,
+ oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
- if (oact)
+ if (oact && result >= 0)
{
- oact->sa_handler = k_oldact.k_sa_handler;
- oact->sa_mask.__val[0] = k_oldact.sa_mask;
- oact->sa_flags = k_oldact.sa_flags;
- oact->sa_restorer = k_oldact.sa_restorer;
+ oact->sa_handler = koact.k_sa_handler;
+ memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
+ oact->sa_flags = koact.sa_flags;
+ oact->sa_restorer = koact.sa_restorer;
}
-
- return 0;
-#endif
+ return result;
}
libc_hidden_def (__libc_sigaction)
diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
index 8d9b4871ec..3c86bb8654 100644
--- a/sysdeps/unix/sysv/linux/if_index.c
+++ b/sysdeps/unix/sysv/linux/if_index.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2007
- 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
@@ -32,14 +31,6 @@
#include "netlinkaccess.h"
-/* Variable to signal whether SIOCGIFCONF is not available. */
-# if __ASSUME_SIOCGIFNAME == 0
-static int old_siocgifconf;
-#else
-# define old_siocgifconf 0
-#endif
-
-
unsigned int
if_nametoindex (const char *ifname)
{
@@ -101,38 +92,20 @@ if_nameindex_ioctl (void)
/* We may be able to get the needed buffer size directly, rather than
guessing. */
- if (! old_siocgifconf)
- {
- ifc.ifc_buf = NULL;
- ifc.ifc_len = 0;
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
- {
-# if __ASSUME_SIOCGIFNAME == 0
- old_siocgifconf = 1;
-# endif
- rq_len = RQ_IFS * sizeof (struct ifreq);
- }
- else
- rq_len = ifc.ifc_len;
- }
- else
+ ifc.ifc_buf = NULL;
+ ifc.ifc_len = 0;
+ if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
rq_len = RQ_IFS * sizeof (struct ifreq);
+ else
+ rq_len = ifc.ifc_len;
/* Read all the interfaces out of the kernel. */
ifc.ifc_buf = alloca (rq_len);
ifc.ifc_len = rq_len;
- while (1)
+ if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
{
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
- {
- close_not_cancel_no_status (fd);
- return NULL;
- }
- if (ifc.ifc_len < rq_len || ! old_siocgifconf)
- break;
-
- ifc.ifc_buf = extend_alloca (ifc.ifc_buf, rq_len, 2 * rq_len);
- ifc.ifc_len = rq_len;
+ close_not_cancel_no_status (fd);
+ return NULL;
}
nifs = ifc.ifc_len / sizeof (struct ifreq);
@@ -314,161 +287,31 @@ libc_hidden_def (if_nameindex)
char *
if_indextoname (unsigned int ifindex, char *ifname)
{
-#if !defined SIOCGIFINDEX && __ASSUME_SIOCGIFNAME == 0
- __set_errno (ENOSYS);
- return NULL;
-#else
-# if __ASSUME_SIOCGIFNAME == 0
- struct if_nameindex *idx;
- struct if_nameindex *p;
- char *result = NULL;
-# endif
-
-# if defined SIOCGIFNAME || __ASSUME_SIOCGIFNAME > 0
/* We may be able to do the conversion directly, rather than searching a
list. This ioctl is not present in kernels before version 2.1.50. */
struct ifreq ifr;
int fd;
-# if __ASSUME_SIOCGIFNAME == 0
- static int siocgifname_works_not;
-
- if (!siocgifname_works_not)
-# endif
- {
-# if __ASSUME_SIOCGIFNAME == 0
- int serrno = errno;
-# endif
- int status;
-
- fd = __opensock ();
-
- if (fd < 0)
- return NULL;
-
- ifr.ifr_ifindex = ifindex;
- status = __ioctl (fd, SIOCGIFNAME, &ifr);
-
- close_not_cancel_no_status (fd);
+ int status;
- if (status < 0)
- {
-# if __ASSUME_SIOCGIFNAME == 0
- if (errno == EINVAL)
- siocgifname_works_not = 1; /* Don't make the same mistake twice. */
- else
-# endif
- {
- if (errno == ENODEV)
- /* POSIX requires ENXIO. */
- __set_errno (ENXIO);
+ fd = __opensock ();
- return NULL;
- }
- }
- else
- return strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
+ if (fd < 0)
+ return NULL;
-# if __ASSUME_SIOCGIFNAME == 0
- __set_errno (serrno);
-# endif
- }
-# endif
+ ifr.ifr_ifindex = ifindex;
+ status = __ioctl (fd, SIOCGIFNAME, &ifr);
-# if __ASSUME_SIOCGIFNAME == 0
- idx = if_nameindex ();
+ close_not_cancel_no_status (fd);
- if (idx != NULL)
+ if (status < 0)
{
- for (p = idx; p->if_index || p->if_name; ++p)
- if (p->if_index == ifindex)
- {
- result = strncpy (ifname, p->if_name, IFNAMSIZ);
- break;
- }
-
- if_freenameindex (idx);
-
- if (result == NULL)
+ if (errno == ENODEV)
+ /* POSIX requires ENXIO. */
__set_errno (ENXIO);
- }
- return result;
-# endif
-#endif
-}
-libc_hidden_def (if_indextoname)
-
-
-#if 0
-void
-internal_function
-__protocol_available (int *have_inet, int *have_inet6)
-{
- int fd = __opensock ();
- unsigned int nifs;
- int rq_len;
- struct ifconf ifc;
-# define RQ_IFS 4
- /* Wirst case assumption. */
- *have_inet = 0;
- *have_inet6 = 0;
-
- if (fd < 0)
- /* We cannot open the socket. No networking at all? */
- return;
-
- /* We may be able to get the needed buffer size directly, rather than
- guessing. */
- if (! old_siocgifconf)
- {
- ifc.ifc_buf = NULL;
- ifc.ifc_len = 0;
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
- {
-# if __ASSUME_SIOCGIFNAME == 0
- old_siocgifconf = 1;
-# endif
- rq_len = RQ_IFS * sizeof (struct ifreq);
- }
- else
- rq_len = ifc.ifc_len;
+ return NULL;
}
else
- rq_len = RQ_IFS * sizeof (struct ifreq);
-
- /* Read all the interfaces out of the kernel. */
- do
- {
- ifc.ifc_buf = alloca (ifc.ifc_len = rq_len);
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
- {
- close_not_cancel_no_status (fd);
- return;
- }
- rq_len *= 2;
- }
- while (ifc.ifc_len == rq_len && old_siocgifconf);
-
- nifs = ifc.ifc_len / sizeof (struct ifreq);
-
- /* Go through all the interfaces and get the address. */
- while (nifs-- > 0)
- if (__ioctl (fd, SIOCGIFADDR, &ifc.ifc_req[nifs]) >= 0)
- {
- /* We successfully got information about this interface. Now
- test whether it is an IPv4 or IPv6 address. */
- if (ifc.ifc_req[nifs].ifr_addr.sa_family == AF_INET)
- *have_inet = 1;
- else if (ifc.ifc_req[nifs].ifr_addr.sa_family == AF_INET6)
- *have_inet6 = 1;
-
- /* Note, this is & not &&. It works since the values are always
- 0 or 1. */
- if (*have_inet & *have_inet6)
- /* We can stop early. */
- break;
- }
-
- close_not_cancel_no_status (fd);
+ return strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
}
-#endif
+libc_hidden_def (if_indextoname)
diff --git a/sysdeps/unix/sysv/linux/ifreq.c b/sysdeps/unix/sysv/linux/ifreq.c
index bd0d17e5d5..551af725b0 100644
--- a/sysdeps/unix/sysv/linux/ifreq.c
+++ b/sysdeps/unix/sysv/linux/ifreq.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999,2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>.
@@ -19,13 +19,6 @@
#include "ifreq.h"
#include <kernel-features.h>
-/* Variable to signal whether SIOCGIFCONF is not available. */
-#if __ASSUME_SIOCGIFNAME == 0 || 1
-static int old_siocgifconf;
-#else
-# define old_siocgifconf 0
-#endif
-
void
__ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd)
@@ -49,45 +42,27 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd)
/* We may be able to get the needed buffer size directly, rather than
guessing. */
- if (! old_siocgifconf)
- {
- ifc.ifc_buf = NULL;
- ifc.ifc_len = 0;
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
- {
-# if __ASSUME_SIOCGIFNAME == 0
- old_siocgifconf = 1;
-# endif
- rq_len = RQ_IFS * sizeof (struct ifreq);
- }
- else
- rq_len = ifc.ifc_len;
- }
- else
+ ifc.ifc_buf = NULL;
+ ifc.ifc_len = 0;
+ if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
rq_len = RQ_IFS * sizeof (struct ifreq);
+ else
+ rq_len = ifc.ifc_len;
/* Read all the interfaces out of the kernel. */
- while (1)
+ ifc.ifc_len = rq_len;
+ void *newp = realloc (ifc.ifc_buf, ifc.ifc_len);
+ if (newp == NULL
+ || (ifc.ifc_buf = newp, __ioctl (fd, SIOCGIFCONF, &ifc)) < 0)
{
- ifc.ifc_len = rq_len;
- void *newp = realloc (ifc.ifc_buf, ifc.ifc_len);
- if (newp == NULL
- || (ifc.ifc_buf = newp, __ioctl (fd, SIOCGIFCONF, &ifc)) < 0)
- {
- free (ifc.ifc_buf);
+ free (ifc.ifc_buf);
- if (fd != sockfd)
- __close (fd);
+ if (fd != sockfd)
+ __close (fd);
- *num_ifs = 0;
- *ifreqs = NULL;
- return;
- }
-
- if (!old_siocgifconf || ifc.ifc_len < rq_len)
- break;
-
- rq_len *= 2;
+ *num_ifs = 0;
+ *ifreqs = NULL;
+ return;
}
nifs = ifc.ifc_len / sizeof (struct ifreq);
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index ffaae5d144..1090f8a809 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -35,60 +35,16 @@
version given by __LINUX_KERNEL_VERSION. We are not always exactly
recording the correct versions in which the features were
introduced. If somebody cares these values can afterwards be
- corrected. Most of the numbers here are set corresponding to
- 2.2.0. */
+ corrected. */
-/* `getcwd' system call. */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_GETCWD_SYSCALL 1
-#endif
-
-/* Real-time signal became usable in 2.1.70. */
-#if __LINUX_KERNEL_VERSION >= 131398
-# define __ASSUME_REALTIME_SIGNALS 1
-#endif
-
-/* When were the `pread'/`pwrite' syscalls introduced? */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_PREAD_SYSCALL 1
-# define __ASSUME_PWRITE_SYSCALL 1
-#endif
-
-/* When was `poll' introduced? */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_POLL_SYSCALL 1
-#endif
-
-/* The `lchown' syscall was introduced in 2.1.80. */
-#if __LINUX_KERNEL_VERSION >= 131408
-# define __ASSUME_LCHOWN_SYSCALL 1
-#endif
-
-/* When did the `setresuid' syscall became available? */
-#if __LINUX_KERNEL_VERSION >= 131584 && !defined __sparc__
+/* When did the `setresuid' syscall became available? By 2.2.0 except
+ on SPARC. */
+#if !defined __sparc__
# define __ASSUME_SETRESUID_SYSCALL 1
#endif
-/* The SIOCGIFNAME ioctl is available starting with 2.1.50. */
-#if __LINUX_KERNEL_VERSION >= 131408
-# define __ASSUME_SIOCGIFNAME 1
-#endif
-
-/* MSG_NOSIGNAL was at least available with Linux 2.2.0. */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_MSG_NOSIGNAL 1
-#endif
-
/* The sendfile syscall was introduced in 2.2.0. */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_SENDFILE 1
-#endif
-
-/* Only very old kernels had no real symlinks for terminal descriptors
- in /proc/self/fd. */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_PROC_SELF_FD_SYMLINK 1
-#endif
+#define __ASSUME_SENDFILE 1
/* On x86 another `getrlimit' syscall was added in 2.3.25. */
#if __LINUX_KERNEL_VERSION >= 131865 && defined __i386__
diff --git a/sysdeps/unix/sysv/linux/poll.c b/sysdeps/unix/sysv/linux/poll.c
index c8f5e6deb1..0abdad0399 100644
--- a/sysdeps/unix/sysv/linux/poll.c
+++ b/sysdeps/unix/sysv/linux/poll.c
@@ -1,6 +1,5 @@
-/* Poll system call, with emulation if it is not available.
- Copyright (C) 1997,1998,1999,2000,2001,2002,2006
- Free Software Foundation, Inc.
+/* Poll system call.
+ 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
@@ -26,58 +25,12 @@
#include <kernel-features.h>
-#if defined __NR_poll || __ASSUME_POLL_SYSCALL > 0
-
-# if __ASSUME_POLL_SYSCALL == 0
-static int __emulate_poll (struct pollfd *fds, nfds_t nfds,
- int timeout) internal_function;
-# endif
-
-
-# if __ASSUME_POLL_SYSCALL == 0
-/* For loser kernels. */
-static int
-loser_poll (struct pollfd *fds, nfds_t nfds, int timeout)
-{
- static int must_emulate;
-
- if (!must_emulate)
- {
- int errno_saved = errno;
- int retval = INLINE_SYSCALL (poll, 3, CHECK_N (fds, nfds), nfds,
- timeout);
-
- if (retval >= 0 || errno != ENOSYS)
- return retval;
-
- __set_errno (errno_saved);
- must_emulate = 1;
- }
-
- return __emulate_poll (fds, nfds, timeout);
-}
-# endif
-
-
-/* The real implementation. */
int
__poll (fds, nfds, timeout)
struct pollfd *fds;
nfds_t nfds;
int timeout;
{
-# if __ASSUME_POLL_SYSCALL == 0
- if (SINGLE_THREAD_P)
- return loser_poll (CHECK_N (fds, nfds), nfds, timeout);
-
- int oldtype = LIBC_CANCEL_ASYNC ();
-
- int result = loser_poll (CHECK_N (fds, nfds), nfds, timeout);
-
- LIBC_CANCEL_RESET (oldtype);
-
- return result;
-# else
if (SINGLE_THREAD_P)
return INLINE_SYSCALL (poll, 3, CHECK_N (fds, nfds), nfds, timeout);
@@ -88,17 +41,7 @@ __poll (fds, nfds, timeout)
LIBC_CANCEL_RESET (oldtype);
return result;
-# endif
}
libc_hidden_def (__poll)
weak_alias (__poll, poll)
strong_alias (__poll, __libc_poll)
-
-/* Get the emulation code. */
-# define __poll(fds, nfds, timeout) \
- static internal_function __emulate_poll (fds, nfds, timeout)
-#endif
-
-#if __ASSUME_POLL_SYSCALL == 0
-# include <sysdeps/unix/bsd/poll.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/chown.c b/sysdeps/unix/sysv/linux/powerpc/chown.c
index 33bb4921c6..be6a828f9b 100644
--- a/sysdeps/unix/sysv/linux/powerpc/chown.c
+++ b/sysdeps/unix/sysv/linux/powerpc/chown.c
@@ -1,5 +1,5 @@
/* chown() compatibility.
- Copyright (C) 1998, 2000, 2002, 2003, 2005 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
@@ -35,95 +35,7 @@
int
__chown (const char *file, uid_t owner, gid_t group)
{
-#if __ASSUME_LCHOWN_SYSCALL
return INLINE_SYSCALL (chown, 3, file, owner, group);
-#else
- int err;
- int old_errno;
- char link[PATH_MAX + 2];
- char path[2 * PATH_MAX + 4];
- int loopct;
- size_t filelen;
- static int libc_old_chown = 0 /* -1=old linux, 1=new linux, 0=unknown */;
-
- if (libc_old_chown == 1)
- return INLINE_SYSCALL (chown, 3, __ptrvalue (file), owner, group);
-
- old_errno = errno;
-
-# ifdef __NR_lchown
- if (libc_old_chown == 0)
- {
- err = INLINE_SYSCALL (chown, 3, __ptrvalue (file), owner, group);
- if (err != -1 || errno != ENOSYS)
- {
- libc_old_chown = 1;
- return err;
- }
- libc_old_chown = -1;
- }
-# endif
-
- err = __readlink (file, link, PATH_MAX + 1);
- if (err == -1)
- {
- __set_errno (old_errno);
- return __lchown (file, owner, group);
- }
-
- filelen = strlen (file) + 1;
- if (filelen > sizeof (path))
- {
- __set_errno (ENAMETOOLONG);
- return -1;
- }
- memcpy (path, file, filelen);
-
- /* 'The system has an arbitrary limit...' In practise, we'll hit
- ENAMETOOLONG before this, usually. */
- for (loopct = 0; loopct < 128; ++loopct)
- {
- size_t linklen;
-
- if (err >= PATH_MAX + 1)
- {
- __set_errno (ENAMETOOLONG);
- return -1;
- }
-
- link[err] = 0; /* Null-terminate string, just-in-case. */
-
- linklen = strlen (link) + 1;
-
- if (link[0] == '/')
- memcpy (path, link, linklen);
- else
- {
- filelen = strlen (path);
-
- while (filelen > 1 && path[filelen - 1] == '/')
- --filelen;
- while (filelen > 0 && path[filelen - 1] != '/')
- --filelen;
- if (filelen + linklen > sizeof (path))
- {
- errno = ENAMETOOLONG;
- return -1;
- }
- memcpy (path + filelen, link, linklen);
- }
-
- err = __readlink (path, link, PATH_MAX + 1);
-
- if (err == -1)
- {
- __set_errno (old_errno);
- return __lchown (path, owner, group);
- }
- }
- __set_errno (ELOOP);
- return -1;
-#endif
}
libc_hidden_def (__chown)
diff --git a/sysdeps/unix/sysv/linux/powerpc/fchownat.c b/sysdeps/unix/sysv/linux/powerpc/fchownat.c
index 16aacb36f7..b92e35a9e7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/fchownat.c
+++ b/sysdeps/unix/sysv/linux/powerpc/fchownat.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2005-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
@@ -86,7 +86,6 @@ fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag)
file = buf;
}
-# if __ASSUME_LCHOWN_SYSCALL
INTERNAL_SYSCALL_DECL (err);
if (flag & AT_SYMLINK_NOFOLLOW)
@@ -99,15 +98,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/powerpc/powerpc32/pread.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c
index 9229aa4c7f..364834f1d0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -27,14 +26,6 @@
#include <kernel-features.h>
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread (int fd, void *buf, size_t count,
- off_t offset) internal_function;
-# endif
-
-
ssize_t
__libc_pread (fd, buf, count, offset)
int fd;
@@ -49,11 +40,6 @@ __libc_pread (fd, buf, count, offset)
/* On PPC32 64bit values are aligned in odd/even register pairs. */
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
0, offset >> 31, offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
return result;
}
@@ -63,11 +49,6 @@ __libc_pread (fd, buf, count, offset)
/* On PPC32 64bit values are aligned in odd/even register pairs. */
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
0, offset >> 31, offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -76,11 +57,3 @@ __libc_pread (fd, buf, count, offset)
strong_alias (__libc_pread, __pread)
weak_alias (__libc_pread, pread)
-
-# define __libc_pread(fd, buf, count, offset) \
- static internal_function __emulate_pread (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
index 21c1f7b95c..5b1445ff23 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -26,13 +25,6 @@
#include <kernel-features.h>
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
-
ssize_t
__libc_pread64 (fd, buf, count, offset)
@@ -49,11 +41,6 @@ __libc_pread64 (fd, buf, count, offset)
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
0, (long) (offset >> 32),
(long) offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
return result;
}
@@ -64,11 +51,6 @@ __libc_pread64 (fd, buf, count, offset)
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
0, (long) (offset >> 32),
(long) offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -77,11 +59,3 @@ __libc_pread64 (fd, buf, count, offset)
weak_alias (__libc_pread64, __pread64)
weak_alias (__libc_pread64, pread64)
-
-# define __libc_pread64(fd, buf, count, offset) \
- static internal_function __emulate_pread64 (fd, buf, count, offset)
-#endif
-
-# if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c
index bf0e3414c2..ed1878bc5e 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -27,13 +26,6 @@
#include <kernel-features.h>
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
- off_t offset) internal_function;
-# endif
-
ssize_t
__libc_pwrite (fd, buf, count, offset)
@@ -49,11 +41,6 @@ __libc_pwrite (fd, buf, count, offset)
/* On PPC32 64bit values are aligned in odd/even register pairs. */
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count,
0, offset >> 31, offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
return result;
}
@@ -63,11 +50,6 @@ __libc_pwrite (fd, buf, count, offset)
/* On PPC32 64bit values are aligned in odd/even register pairs. */
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count,
0, offset >> 31, offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -76,11 +58,3 @@ __libc_pwrite (fd, buf, count, offset)
strong_alias (__libc_pwrite, __pwrite)
weak_alias (__libc_pwrite, pwrite)
-
-# define __libc_pwrite(fd, buf, count, offset) \
- static internal_function __emulate_pwrite (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c
index 0162d88395..dedeb7e97d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -26,13 +25,6 @@
#include <kernel-features.h>
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
-
ssize_t
__libc_pwrite64 (fd, buf, count, offset)
@@ -49,11 +41,6 @@ __libc_pwrite64 (fd, buf, count, offset)
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count,
0, (long) (offset >> 32),
(long) offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
return result;
}
@@ -64,11 +51,6 @@ __libc_pwrite64 (fd, buf, count, offset)
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count,
0, (long) (offset >> 32),
(long) offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -78,11 +60,3 @@ __libc_pwrite64 (fd, buf, count, offset)
weak_alias (__libc_pwrite64, __pwrite64)
libc_hidden_weak (__pwrite64)
weak_alias (__libc_pwrite64, pwrite64)
-
-# define __libc_pwrite64(fd, buf, count, offset) \
- static internal_function __emulate_pwrite64 (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
index 6b8f3ea4f1..e06de3bfe4 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -27,13 +26,6 @@
#include <kernel-features.h>
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread (int fd, void *buf, size_t count,
- off_t offset) internal_function;
-# endif
-
ssize_t
__libc_pread (fd, buf, count, offset)
@@ -48,11 +40,6 @@ __libc_pread (fd, buf, count, offset)
{
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
return result;
}
@@ -61,11 +48,6 @@ __libc_pread (fd, buf, count, offset)
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -74,11 +56,3 @@ __libc_pread (fd, buf, count, offset)
strong_alias (__libc_pread, __pread)
weak_alias (__libc_pread, pread)
-
-# define __libc_pread(fd, buf, count, offset) \
- static internal_function __emulate_pread (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
index 0933806b07..80c2d2c8a3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -26,13 +25,6 @@
#include <kernel-features.h>
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
-
ssize_t
__libc_pread64 (fd, buf, count, offset)
@@ -47,11 +39,6 @@ __libc_pread64 (fd, buf, count, offset)
{
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
return result;
}
@@ -60,11 +47,6 @@ __libc_pread64 (fd, buf, count, offset)
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -73,11 +55,3 @@ __libc_pread64 (fd, buf, count, offset)
weak_alias (__libc_pread64, __pread64)
weak_alias (__libc_pread64, pread64)
-
-# define __libc_pread64(fd, buf, count, offset) \
- static internal_function __emulate_pread64 (fd, buf, count, offset)
-#endif
-
-# if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
index b956b48ba0..57458b43c5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -27,13 +26,6 @@
#include <kernel-features.h>
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
- off_t offset) internal_function;
-# endif
-
ssize_t
__libc_pwrite (fd, buf, count, offset)
@@ -48,11 +40,6 @@ __libc_pwrite (fd, buf, count, offset)
{
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
return result;
}
@@ -61,11 +48,6 @@ __libc_pwrite (fd, buf, count, offset)
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -74,11 +56,3 @@ __libc_pwrite (fd, buf, count, offset)
strong_alias (__libc_pwrite, __pwrite)
weak_alias (__libc_pwrite, pwrite)
-
-# define __libc_pwrite(fd, buf, count, offset) \
- static internal_function __emulate_pwrite (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
index ec9bba53cb..75344dfd26 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -26,13 +25,6 @@
#include <kernel-features.h>
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
-
ssize_t
__libc_pwrite64 (fd, buf, count, offset)
@@ -47,11 +39,6 @@ __libc_pwrite64 (fd, buf, count, offset)
{
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
return result;
}
@@ -60,11 +47,6 @@ __libc_pwrite64 (fd, buf, count, offset)
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count,
offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -74,11 +56,3 @@ __libc_pwrite64 (fd, buf, count, offset)
weak_alias (__libc_pwrite64, __pwrite64)
libc_hidden_weak (__pwrite64)
weak_alias (__libc_pwrite64, pwrite64)
-
-# define __libc_pwrite64(fd, buf, count, offset) \
- static internal_function __emulate_pwrite64 (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/pread.c b/sysdeps/unix/sysv/linux/pread.c
index dd8c5e767e..4ea67fcb0b 100644
--- a/sysdeps/unix/sysv/linux/pread.c
+++ b/sysdeps/unix/sysv/linux/pread.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2000,2002,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -34,13 +34,6 @@
# define __NR_pread __NR_pread64
#endif
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread (int fd, void *buf, size_t count,
- off_t offset) internal_function;
-# endif
-
static ssize_t
#ifdef NO_CANCELLATION
@@ -50,15 +43,9 @@ do_pread (int fd, void *buf, size_t count, off_t offset)
{
ssize_t result;
- /* First try the syscall. */
assert (sizeof (offset) == 4);
result = INLINE_SYSCALL (pread, 5, fd, CHECK_N (buf, count), count,
__LONG_LONG_PAIR (offset >> 31, offset));
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
return result;
}
@@ -85,11 +72,3 @@ __libc_pread (fd, buf, count, offset)
strong_alias (__libc_pread, __pread)
weak_alias (__libc_pread, pread)
-
-# define __libc_pread(fd, buf, count, offset) \
- static internal_function __emulate_pread (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/pread64.c b/sysdeps/unix/sysv/linux/pread64.c
index 8d2d02bfe5..897b5674a7 100644
--- a/sysdeps/unix/sysv/linux/pread64.c
+++ b/sysdeps/unix/sysv/linux/pread64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -34,28 +33,15 @@
# define __NR_pread __NR_pread64
#endif
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
-
static ssize_t
do_pread64 (int fd, void *buf, size_t count, off64_t offset)
{
ssize_t result;
- /* First try the syscall. */
result = INLINE_SYSCALL (pread, 5, fd, CHECK_N (buf, count), count,
__LONG_LONG_PAIR ((off_t) (offset >> 32),
(off_t) (offset & 0xffffffff)));
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
return result;
}
@@ -82,11 +68,3 @@ __libc_pread64 (fd, buf, count, offset)
weak_alias (__libc_pread64, __pread64)
weak_alias (__libc_pread64, pread64)
-
-# define __libc_pread64(fd, buf, count, offset) \
- static internal_function __emulate_pread64 (fd, buf, count, offset)
-#endif
-
-# if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/ptsname.c b/sysdeps/unix/sysv/linux/ptsname.c
index fb097698fb..bf8ca864a2 100644
--- a/sysdeps/unix/sysv/linux/ptsname.c
+++ b/sysdeps/unix/sysv/linux/ptsname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000, 2001, 2002, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998.
@@ -127,12 +127,6 @@ __ptsname_internal (int fd, char *buf, size_t buflen, struct stat64 *stp)
}
ptyno = minor (stp->st_rdev);
-#if __LINUX_KERNEL_VERSION < 131443
- /* This is for the old BSD pseudo terminals. As of Linux
- 2.1.115 these are no longer supported. */
- if (major (stp->st_rdev) == 4)
- ptyno -= 128;
-#endif
if (ptyno / 16 >= strlen (__libc_ptyname1))
{
diff --git a/sysdeps/unix/sysv/linux/pwrite.c b/sysdeps/unix/sysv/linux/pwrite.c
index 6d1ab86242..c4940fcdd0 100644
--- a/sysdeps/unix/sysv/linux/pwrite.c
+++ b/sysdeps/unix/sysv/linux/pwrite.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2000,2002,2003,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -34,13 +34,6 @@
# define __NR_pwrite __NR_pwrite64
#endif
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
- off_t offset) internal_function;
-# endif
-
static ssize_t
#ifdef NO_CANCELLATION
@@ -50,15 +43,9 @@ do_pwrite (int fd, const void *buf, size_t count, off_t offset)
{
ssize_t result;
- /* First try the syscall. */
assert (sizeof (offset) == 4);
result = INLINE_SYSCALL (pwrite, 5, fd, CHECK_N (buf, count), count,
__LONG_LONG_PAIR (offset >> 31, offset));
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
return result;
}
@@ -85,11 +72,3 @@ __libc_pwrite (fd, buf, count, offset)
strong_alias (__libc_pwrite, __pwrite)
weak_alias (__libc_pwrite, pwrite)
-
-# define __libc_pwrite(fd, buf, count, offset) \
- static internal_function __emulate_pwrite (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/pwrite64.c b/sysdeps/unix/sysv/linux/pwrite64.c
index 5deab9d649..ad945a2903 100644
--- a/sysdeps/unix/sysv/linux/pwrite64.c
+++ b/sysdeps/unix/sysv/linux/pwrite64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -34,28 +33,15 @@
# define __NR_pwrite __NR_pwrite64
#endif
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
-
static ssize_t
do_pwrite64 (int fd, const void *buf, size_t count, off64_t offset)
{
ssize_t result;
- /* First try the syscall. */
result = INLINE_SYSCALL (pwrite, 5, fd, CHECK_N (buf, count), count,
__LONG_LONG_PAIR ((off_t) (offset >> 32),
(off_t) (offset & 0xffffffff)));
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
return result;
}
@@ -83,11 +69,3 @@ __libc_pwrite64 (fd, buf, count, offset)
weak_alias (__libc_pwrite64, __pwrite64)
libc_hidden_weak (__pwrite64)
weak_alias (__libc_pwrite64, pwrite64)
-
-# define __libc_pwrite64(fd, buf, count, offset) \
- static internal_function __emulate_pwrite64 (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/pread.c b/sysdeps/unix/sysv/linux/sh/pread.c
index 30cbec63a0..3e7702f10d 100644
--- a/sysdeps/unix/sysv/linux/sh/pread.c
+++ b/sysdeps/unix/sysv/linux/sh/pread.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -35,12 +34,6 @@
# define __NR_pread __NR_pread64
#endif
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread (int fd, void *buf, size_t count,
- off_t offset) internal_function;
-# endif
ssize_t
__libc_pread (fd, buf, count, offset)
@@ -53,27 +46,15 @@ __libc_pread (fd, buf, count, offset)
if (SINGLE_THREAD_P)
{
- /* First try the syscall. */
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR (offset >> 31, offset));
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
return result;
}
int oldtype = LIBC_CANCEL_ASYNC ();
- /* First try the syscall. */
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR (offset >> 31, offset));
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -82,11 +63,3 @@ __libc_pread (fd, buf, count, offset)
strong_alias (__libc_pread, __pread)
weak_alias (__libc_pread, pread)
-
-# define __libc_pread(fd, buf, count, offset) \
- static internal_function __emulate_pread (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/pread64.c b/sysdeps/unix/sysv/linux/sh/pread64.c
index 6c0bf5d2f6..523ed7f82f 100644
--- a/sysdeps/unix/sysv/linux/sh/pread64.c
+++ b/sysdeps/unix/sysv/linux/sh/pread64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -34,12 +33,6 @@
# define __NR_pread __NR_pread64
#endif
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
ssize_t
__libc_pread64 (fd, buf, count, offset)
@@ -52,29 +45,17 @@ __libc_pread64 (fd, buf, count, offset)
if (SINGLE_THREAD_P)
{
- /* First try the syscall. */
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR ((off_t) (offset >> 32),
(off_t) (offset & 0xffffffff)));
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
return result;
}
int oldtype = LIBC_CANCEL_ASYNC ();
- /* First try the syscall. */
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR ((off_t) (offset >> 32),
(off_t) (offset & 0xffffffff)));
-# if __ASSUME_PREAD_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pread64 (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -83,11 +64,3 @@ __libc_pread64 (fd, buf, count, offset)
weak_alias (__libc_pread64, __pread64)
weak_alias (__libc_pread64, pread64)
-
-# define __libc_pread64(fd, buf, count, offset) \
- static internal_function __emulate_pread64 (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/pwrite.c b/sysdeps/unix/sysv/linux/sh/pwrite.c
index 75e0e9850b..e8052757aa 100644
--- a/sysdeps/unix/sysv/linux/sh/pwrite.c
+++ b/sysdeps/unix/sysv/linux/sh/pwrite.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -35,12 +34,6 @@
# define __NR_pwrite __NR_pwrite64
#endif
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
- off_t offset) internal_function;
-# endif
ssize_t
__libc_pwrite (fd, buf, count, offset)
@@ -53,27 +46,15 @@ __libc_pwrite (fd, buf, count, offset)
if (SINGLE_THREAD_P)
{
- /* First try the syscall. */
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR (offset >> 31, offset));
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
return result;
}
int oldtype = LIBC_CANCEL_ASYNC ();
- /* First try the syscall. */
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR (offset >> 31, offset));
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -82,11 +63,3 @@ __libc_pwrite (fd, buf, count, offset)
strong_alias (__libc_pwrite, __pwrite)
weak_alias (__libc_pwrite, pwrite)
-
-# define __libc_pwrite(fd, buf, count, offset) \
- static internal_function __emulate_pwrite (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/pwrite64.c b/sysdeps/unix/sysv/linux/sh/pwrite64.c
index 0fd21af12f..8f80fea495 100644
--- a/sysdeps/unix/sysv/linux/sh/pwrite64.c
+++ b/sysdeps/unix/sysv/linux/sh/pwrite64.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004, 2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ralf Baechle <ralf@gnu.org>, 1998.
@@ -34,12 +33,6 @@
# define __NR_pwrite __NR_pwrite64
#endif
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
- off64_t offset) internal_function;
-# endif
ssize_t
__libc_pwrite64 (fd, buf, count, offset)
@@ -52,30 +45,18 @@ __libc_pwrite64 (fd, buf, count, offset)
if (SINGLE_THREAD_P)
{
- /* First try the syscall. */
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR ((off_t) (offset >> 32),
(off_t) (offset & 0xffffffff)));
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
return result;
}
int oldtype = LIBC_CANCEL_ASYNC ();
- /* First try the syscall. */
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,
__LONG_LONG_PAIR ((off_t) (offset >> 32),
(off_t) (offset & 0xffffffff)));
-# if __ASSUME_PWRITE_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use the emulation. */
- result = __emulate_pwrite64 (fd, buf, count, offset);
-# endif
LIBC_CANCEL_RESET (oldtype);
@@ -85,11 +66,3 @@ __libc_pwrite64 (fd, buf, count, offset)
weak_alias (__libc_pwrite64, __pwrite64)
libc_hidden_weak (__pwrite64)
weak_alias (__libc_pwrite64, pwrite64)
-
-# define __libc_pwrite64(fd, buf, count, offset) \
- static internal_function __emulate_pwrite64 (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite64.c>
-#endif
diff --git a/sysdeps/unix/sysv/linux/sigaction.c b/sysdeps/unix/sysv/linux/sigaction.c
index 37f7a2c149..01fb16e557 100644
--- a/sysdeps/unix/sysv/linux/sigaction.c
+++ b/sysdeps/unix/sysv/linux/sigaction.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2000,2002,2003,2005,2006 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
@@ -29,12 +29,6 @@
translate it here. */
#include <kernel_sigaction.h>
-#if __ASSUME_REALTIME_SIGNALS == 0
-/* The variable is shared between all wrappers around signal handling
- functions which have RT equivalents. This is the definition. */
-int __libc_missing_rt_sigs;
-#endif
-
/* If ACT is not NULL, change the action for SIG to *ACT.
If OACT is not NULL, put the old action for SIG in *OACT. */
@@ -44,87 +38,36 @@ __libc_sigaction (sig, act, oact)
const struct sigaction *act;
struct sigaction *oact;
{
-#if __ASSUME_REALTIME_SIGNALS == 0
- struct old_kernel_sigaction k_sigact, k_osigact;
-#endif
int result;
-#if defined __NR_rt_sigaction || __ASSUME_REALTIME_SIGNALS > 0
- /* First try the RT signals. */
-# if __ASSUME_REALTIME_SIGNALS == 0
- if (!__libc_missing_rt_sigs)
-# endif
- {
- struct kernel_sigaction kact, koact;
- /* Save the current error value for later. We need not do this
- if we are guaranteed to have realtime signals. */
-# if __ASSUME_REALTIME_SIGNALS == 0
- int saved_errno = errno;
-# endif
-
- if (act)
- {
- kact.k_sa_handler = act->sa_handler;
- memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
- kact.sa_flags = act->sa_flags;
-# ifdef HAVE_SA_RESTORER
- kact.sa_restorer = act->sa_restorer;
-# endif
- }
-
- /* XXX The size argument hopefully will have to be changed to the
- real size of the user-level sigset_t. */
- result = INLINE_SYSCALL (rt_sigaction, 4, sig,
- act ? __ptrvalue (&kact) : NULL,
- oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
+ struct kernel_sigaction kact, koact;
-# if __ASSUME_REALTIME_SIGNALS == 0
- if (result >= 0 || errno != ENOSYS)
-# endif
- {
- if (oact && result >= 0)
- {
- oact->sa_handler = koact.k_sa_handler;
- memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
- oact->sa_flags = koact.sa_flags;
-# ifdef HAVE_SA_RESTORER
- oact->sa_restorer = koact.sa_restorer;
-# endif
- }
- return result;
- }
-
-# if __ASSUME_REALTIME_SIGNALS == 0
- __set_errno (saved_errno);
- __libc_missing_rt_sigs = 1;
-# endif
- }
-#endif
-
-#if __ASSUME_REALTIME_SIGNALS == 0
if (act)
{
- k_sigact.k_sa_handler = act->sa_handler;
- k_sigact.sa_mask = act->sa_mask.__val[0];
- k_sigact.sa_flags = act->sa_flags;
-# ifdef HAVE_SA_RESTORER
- k_sigact.sa_restorer = act->sa_restorer;
-# endif
+ kact.k_sa_handler = act->sa_handler;
+ memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
+ kact.sa_flags = act->sa_flags;
+#ifdef HAVE_SA_RESTORER
+ kact.sa_restorer = act->sa_restorer;
+#endif
}
- result = INLINE_SYSCALL (sigaction, 3, sig,
- act ? __ptrvalue (&k_sigact) : NULL,
- oact ? __ptrvalue (&k_osigact) : NULL);
+
+ /* XXX The size argument hopefully will have to be changed to the
+ real size of the user-level sigset_t. */
+ result = INLINE_SYSCALL (rt_sigaction, 4, sig,
+ act ? __ptrvalue (&kact) : NULL,
+ oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
+
if (oact && result >= 0)
{
- oact->sa_handler = k_osigact.k_sa_handler;
- oact->sa_mask.__val[0] = k_osigact.sa_mask;
- oact->sa_flags = k_osigact.sa_flags;
-# ifdef HAVE_SA_RESTORER
- oact->sa_restorer = k_osigact.sa_restorer;
-# endif
+ oact->sa_handler = koact.k_sa_handler;
+ memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
+ oact->sa_flags = koact.sa_flags;
+#ifdef HAVE_SA_RESTORER
+ oact->sa_restorer = koact.sa_restorer;
+#endif
}
return result;
-#endif
}
libc_hidden_def (__libc_sigaction)
diff --git a/sysdeps/unix/sysv/linux/sigpending.c b/sysdeps/unix/sysv/linux/sigpending.c
index 91d08db17d..7174b4ae3a 100644
--- a/sysdeps/unix/sysv/linux/sigpending.c
+++ b/sysdeps/unix/sysv/linux/sigpending.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2003,2006
- 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,37 +26,11 @@
#include <kernel-features.h>
-/* The variable is shared between all wrappers around signal handling
- functions which have RT equivalents. The definition is in sigaction.c. */
-extern int __libc_missing_rt_sigs;
-
-
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
int
sigpending (set)
sigset_t *set;
{
-#if __ASSUME_REALTIME_SIGNALS > 0
return INLINE_SYSCALL (rt_sigpending, 2, CHECK_SIGSET (set), _NSIG / 8);
-#else
-# ifdef __NR_rt_sigpending
- /* First try the RT signals. */
- if (!__libc_missing_rt_sigs)
- {
- /* XXX The size argument hopefully will have to be changed to the
- real size of the user-level sigset_t. */
- int saved_errno = errno;
- int result = INLINE_SYSCALL (rt_sigpending, 2, CHECK_SIGSET (set), _NSIG / 8);
-
- if (result >= 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_rt_sigs = 1;
- }
-# endif
-
- return INLINE_SYSCALL (sigpending, 1, CHECK_SIGSET (set));
-#endif
}
diff --git a/sysdeps/unix/sysv/linux/sigprocmask.c b/sysdeps/unix/sysv/linux/sigprocmask.c
index 2e91660f9b..a5ac4dd501 100644
--- a/sysdeps/unix/sysv/linux/sigprocmask.c
+++ b/sysdeps/unix/sysv/linux/sigprocmask.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2001,2003,2004,2006 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,11 +27,6 @@
#include <kernel-features.h>
-/* The variable is shared between all wrappers around signal handling
- functions which have RT equivalents. The definition is in sigaction.c. */
-extern int __libc_missing_rt_sigs;
-
-
/* Get and/or change the set of blocked signals. */
int
__sigprocmask (how, set, oset)
@@ -60,31 +55,7 @@ __sigprocmask (how, set, oset)
}
#endif
-#if __ASSUME_REALTIME_SIGNALS > 0
return INLINE_SYSCALL (rt_sigprocmask, 4, how, CHECK_SIGSET_NULL_OK (set),
CHECK_SIGSET_NULL_OK (oset), _NSIG / 8);
-#else
-# ifdef __NR_rt_sigprocmask
- /* First try the RT signals. */
- if (!__libc_missing_rt_sigs)
- {
- /* XXX The size argument hopefully will have to be changed to the
- real size of the user-level sigset_t. */
- int saved_errno = errno;
- int result = INLINE_SYSCALL (rt_sigprocmask, 4, how,
- CHECK_SIGSET_NULL_OK (set),
- CHECK_SIGSET_NULL_OK (oset), _NSIG / 8);
-
- if (result >= 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_rt_sigs = 1;
- }
-# endif
-
- return INLINE_SYSCALL (sigprocmask, 3, how, CHECK_SIGSET_NULL_OK (set),
- CHECK_SIGSET_NULL_OK (oset));
-#endif
}
weak_alias (__sigprocmask, sigprocmask)
diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c
index 30b8b585b1..e1ee87b29f 100644
--- a/sysdeps/unix/sysv/linux/sigsuspend.c
+++ b/sysdeps/unix/sysv/linux/sigsuspend.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2000,2002,2003,2006
- Free Software Foundation, Inc.
+/* Copyright (C) 1996-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,41 +26,11 @@
#include <kernel-features.h>
-#if !__ASSUME_REALTIME_SIGNALS
-/* The variable is shared between all wrappers around signal handling
- functions which have RT equivalents. The definition is in sigaction.c. */
-extern int __libc_missing_rt_sigs;
-
-
-static int
-do_sigsuspend (const sigset_t *set)
-{
-# ifdef __NR_rt_sigsuspend
- /* First try the RT signals. */
- if (!__libc_missing_rt_sigs)
- {
- /* XXX The size argument hopefully will have to be changed to the
- real size of the user-level sigset_t. */
- int saved_errno = errno;
- int result = INLINE_SYSCALL (rt_sigsuspend, 2,
- CHECK_SIGSET (set), _NSIG / 8);
- if (result >= 0 || errno != ENOSYS)
- return result;
-
- __set_errno (saved_errno);
- __libc_missing_rt_sigs = 1;
- }
-# endif
-
- return INLINE_SYSCALL (sigsuspend, 3, 0, 0, set->__val[0]);
-}
-#else
static inline int __attribute__ ((always_inline))
do_sigsuspend (const sigset_t *set)
{
return INLINE_SYSCALL (rt_sigsuspend, 2, CHECK_SIGSET (set), _NSIG / 8);
}
-#endif
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
index c3201b8a9e..7bdf5e0bdd 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
@@ -27,106 +27,40 @@
static void __rt_sigreturn_stub (void);
static void __sigreturn_stub (void);
-/* The variable is shared between all wrappers around signal handling
- functions which have RT equivalents. */
-int __libc_missing_rt_sigs;
-
int
__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
{
struct old_kernel_sigaction k_sigact, k_osigact;
int ret;
-#ifdef __NR_rt_sigaction
- /* First try the RT signals. */
- if (!__libc_missing_rt_sigs)
- {
- struct kernel_sigaction kact, koact;
- unsigned long stub = 0;
- int saved_errno = errno;
-
- if (act)
- {
- kact.k_sa_handler = act->sa_handler;
- memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
- if (((kact.sa_flags = act->sa_flags) & SA_SIGINFO) != 0)
- stub = (unsigned long) &__rt_sigreturn_stub;
- else
- stub = (unsigned long) &__sigreturn_stub;
- stub -= 8;
- kact.sa_restorer = NULL;
- }
-
- /* XXX The size argument hopefully will have to be changed to the
- real size of the user-level sigset_t. */
- ret = INLINE_SYSCALL (rt_sigaction, 5, sig, act ? &kact : 0,
- oact ? &koact : 0, stub, _NSIG / 8);
-
- if (ret >= 0 || errno != ENOSYS)
- {
- if (oact && ret >= 0)
- {
- oact->sa_handler = koact.k_sa_handler;
- memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
- oact->sa_flags = koact.sa_flags;
- oact->sa_restorer = koact.sa_restorer;
- }
- return ret;
- }
-
- __set_errno (saved_errno);
- __libc_missing_rt_sigs = 1;
- }
-#endif
-
- /* Magic to tell the kernel we are using "new-style" signals, in that
- the signal table is not kept in userspace. Not the same as the
- really-new-style rt signals. */
- sig = -sig;
+ struct kernel_sigaction kact, koact;
+ unsigned long stub = 0;
if (act)
{
- k_sigact.k_sa_handler = act->sa_handler;
- k_sigact.sa_mask = act->sa_mask.__val[0];
- k_sigact.sa_flags = act->sa_flags;
- k_sigact.sa_restorer = NULL;
+ kact.k_sa_handler = act->sa_handler;
+ memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
+ if (((kact.sa_flags = act->sa_flags) & SA_SIGINFO) != 0)
+ stub = (unsigned long) &__rt_sigreturn_stub;
+ else
+ stub = (unsigned long) &__sigreturn_stub;
+ stub -= 8;
+ kact.sa_restorer = NULL;
}
- {
- register int r_syscallnr __asm__("%g1") = __NR_sigaction;
- register int r_sig __asm__("%o0") = sig;
- register struct old_kernel_sigaction *r_act __asm__("%o1");
- register struct old_kernel_sigaction *r_oact __asm__("%o2");
-
- r_act = act ? &k_sigact : NULL;
- r_oact = oact ? &k_osigact : NULL;
+ /* XXX The size argument hopefully will have to be changed to the
+ real size of the user-level sigset_t. */
+ ret = INLINE_SYSCALL (rt_sigaction, 5, sig, act ? &kact : 0,
+ oact ? &koact : 0, stub, _NSIG / 8);
- __asm__ __volatile__("t 0x10\n\t"
- "bcc 1f\n\t"
- " nop\n\t"
- "sub %%g0,%%o0,%%o0\n"
- "1:"
- : "=r"(r_sig)
- : "r"(r_syscallnr), "r"(r_act), "r"(r_oact),
- "0"(r_sig));
-
- ret = r_sig;
- }
-
- if (ret >= 0)
+ if (oact && ret >= 0)
{
- if (oact)
- {
- oact->sa_handler = k_osigact.k_sa_handler;
- oact->sa_mask.__val[0] = k_osigact.sa_mask;
- oact->sa_flags = k_osigact.sa_flags;
- oact->sa_restorer = NULL;
- }
- return ret;
+ oact->sa_handler = koact.k_sa_handler;
+ memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
+ oact->sa_flags = koact.sa_flags;
+ oact->sa_restorer = koact.sa_restorer;
}
-
- __set_errno (-ret);
- return -1;
+ return ret;
}
libc_hidden_def (__libc_sigaction)
diff --git a/sysdeps/unix/sysv/linux/syslog.c b/sysdeps/unix/sysv/linux/syslog.c
index 145e22b520..d01a91ad66 100644
--- a/sysdeps/unix/sysv/linux/syslog.c
+++ b/sysdeps/unix/sysv/linux/syslog.c
@@ -1,10 +1,6 @@
#include <kernel-features.h>
-#if __ASSUME_MSG_NOSIGNAL
-# define NO_SIGPIPE
-# define send_flags MSG_NOSIGNAL
-#else
-# define send_flags 0
-#endif
+#define NO_SIGPIPE
+#define send_flags MSG_NOSIGNAL
#include <misc/syslog.c>
diff --git a/sysdeps/unix/sysv/linux/testrtsig.h b/sysdeps/unix/sysv/linux/testrtsig.h
index cab587b094..f7650ccf3e 100644
--- a/sysdeps/unix/sysv/linux/testrtsig.h
+++ b/sysdeps/unix/sysv/linux/testrtsig.h
@@ -1,5 +1,5 @@
/* Test whether RT signals are really available.
- Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -25,11 +25,5 @@
static int
kernel_has_rtsig (void)
{
-#if __ASSUME_REALTIME_SIGNALS
return 1;
-#else
- struct utsname name;
-
- return uname (&name) == 0 && __strverscmp (name.release, "2.1.70") >= 0;
-#endif
}
diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
index 0cfb4740b8..3dacd40c23 100644
--- a/sysdeps/unix/sysv/linux/ttyname.c
+++ b/sysdeps/unix/sysv/linux/ttyname.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991-1993,1996-2002,2006,2009,2010
- Free Software Foundation, Inc.
+/* Copyright (C) 1991-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
@@ -155,12 +154,7 @@ ttyname (int fd)
return NULL;
}
- if (__builtin_expect (len != -1
-#ifndef __ASSUME_PROC_SELF_FD_SYMLINK
- /* This is for Linux 2.0. */
- && ttyname_buf[0] != '['
-#endif
- , 1))
+ if (__builtin_expect (len != -1, 1))
{
if ((size_t) len >= buflen)
return NULL;
diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
index f097311a15..2dd6781348 100644
--- a/sysdeps/unix/sysv/linux/ttyname_r.c
+++ b/sysdeps/unix/sysv/linux/ttyname_r.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991-1993,1995-2001,2003,2006,2010
- Free Software Foundation, Inc.
+/* Copyright (C) 1991-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
@@ -141,12 +140,7 @@ __ttyname_r (int fd, char *buf, size_t buflen)
return ERANGE;
}
- if (__builtin_expect (ret != -1
-#ifndef __ASSUME_PROC_SELF_FD_SYMLINK
- /* This is for Linux 2.0. */
- && buf[0] != '['
-#endif
- , 1))
+ if (__builtin_expect (ret != -1, 1))
{
#define UNREACHABLE_LEN strlen ("(unreachable)")
if (ret > UNREACHABLE_LEN