summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog72
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in10
-rw-r--r--io/utime.h2
-rw-r--r--localedata/ChangeLog9
-rw-r--r--localedata/locales/cy_GB6
-rw-r--r--localedata/locales/nb_NO2
-rw-r--r--malloc/arena.c3
-rw-r--r--nptl/ChangeLog19
-rw-r--r--nptl/sysdeps/pthread/pthread_sigmask.c10
-rw-r--r--nptl/sysdeps/pthread/sigaction.c4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/pthread_kill.c7
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h8
-rw-r--r--nscd/nscd_getai.c6
-rw-r--r--posix/sys/wait.h7
-rw-r--r--posix/tst-waitid.c71
-rw-r--r--stdlib/stdlib.h3
-rw-r--r--sunrpc/Makefile4
-rw-r--r--sunrpc/Versions3
-rw-r--r--sunrpc/get_myaddr.c2
-rw-r--r--sunrpc/pmap_clnt.c2
-rw-r--r--sunrpc/pmap_rmt.c2
-rw-r--r--sunrpc/rpc/xdr.h2
-rw-r--r--sunrpc/rpc_parse.c12
-rw-r--r--sunrpc/tst-getmyaddr.c24
-rw-r--r--sunrpc/xdr_intXX_t.c11
-rw-r--r--sysdeps/generic/bits/waitstatus.h18
-rw-r--r--sysdeps/generic/sigfillset.c6
-rw-r--r--sysdeps/i386/dl-machine.h16
-rw-r--r--sysdeps/posix/getaddrinfo.c10
-rw-r--r--sysdeps/unix/sysv/linux/ia64/bits/siginfo.h3
-rw-r--r--sysdeps/unix/sysv/linux/sigprocmask.c14
-rw-r--r--sysdeps/unix/sysv/linux/sigtimedwait.c12
-rw-r--r--sysdeps/unix/sysv/linux/sigwait.c12
-rw-r--r--sysdeps/unix/sysv/linux/sigwaitinfo.c12
-rw-r--r--sysdeps/unix/sysv/linux/waitid.c5
43 files changed, 375 insertions, 92 deletions
diff --git a/ChangeLog b/ChangeLog
index d208b771e9..f8a6690432 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,75 @@
+2004-09-28 Ulrich Drepper <drepper@redhat.com>
+
+ * nscd/nscd_getai.c: Use NO_MAPPING instead of MAP_FAILED for test
+ of failing __nscd_get_map_ref. Fix a few typos.
+
+ * sysdeps/unix/sysv/linux/sigwait.c (do_sigwait): Make sure
+ SIGSETXID is not blocked.
+ * sysdeps/unix/sysv/linux/sigwaitinfo.c (do_sigwaitinfo): Likewise.
+ * sysdeps/unix/sysv/linux/sigtimedwait.c (do_sigtimedwait): Likewise.
+ * sysdeps/unix/sysv/linux/sigprocmask.c (__sigprocmask): Likewise.
+ * sysdeps/generic/sigfillset.c (sigfillset): Don't set SIGSETXID.
+
+ * sunrpc/get_myaddr.c (get_myaddress): Fix test for failing
+ getifaddrs call.
+ * sunrpc/pmap_clnt.c (__get_myaddress): Likewise.
+ * sunrpc/pmap_rmt.c (getbroadcastnets): Likewise.
+ * sunrpc/Makefile (xtests): Add tst-getmyaddr.
+ * sunrpc/tst-getmyaddr.c: New file.
+
+ * malloc/arena.c (ptmalloc_init): Allow MALLOC_CHECK_==0 to
+ disable all checking.
+
+ * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h (si_flags): Add
+ support to get this value.
+
+2004-09-28 Jakub Jelinek <jakub@redhat.com>
+
+ * io/utime.h (utime): Allow second argument to be NULL.
+
+2004-09-28 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/posix/getaddrinfo.c (gaih_inet): If NAME is a numerical IP
+ address and AI_CANONNAME is set, return copy of NAME as ai_canonname.
+
+2004-09-27 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/i386/dl-machine.h (elf_machine_rela_relative): Replace
+ static inline by auto inline, add always_inline attribute.
+ (elf_machine_rel): Likewise.
+ (elf_machine_rela): Likewise.
+ (elf_machine_lazy_rel): Likewise.
+ (elf_machine_lazy_rela): Likewise.
+ (elf_machine_rel_relative): Likewise.
+
+2004-09-27 Ulrich Drepper <drepper@redhat.com>
+
+ * sunrpc/xdr_intXX_t.c: Add xdr_quad_t and xdr_u_quad_t aliases.
+ * sunrpc/rpc/xdr.h: Declare xdr_quad_t and xdr_u_quad_t.
+ * sunrpc/rpc_parse.c (get_type): Use "quad_t" for TOK_HYPER.
+ Otherwise isvectordef will loop infinitely if typedef hyper int64_t
+ is seen.
+ (unsigned_dec): Use "u_quad_t" for similar reasons.
+ * sunrpc/Versions: Export xdr_quad_t and xdr_u_quad_t.
+
+2004-09-27 Roland McGrath <roland@redhat.com>
+
+ * sysdeps/generic/bits/waitstatus.h (__WIFSIGNALED): Simplify bit
+ twiddling in last change.
+
+ * posix/tst-waitid.c (do_test): Add tests for waitpid with WCONTINUED.
+
+ [BZ #409]
+ * posix/sys/wait.h [__WIFCONTINUED] (WIFCONTINUED): New macro.
+ * stdlib/stdlib.h [__WIFCONTINUED] (WIFCONTINUED): New macro.
+ * sysdeps/generic/bits/waitstatus.h (__W_CONTINUED): New macro.
+ [WCONTINUED] (__WIFCONTINUED): New macro.
+ (__WIFSIGNALED): Rewritten to exclude __W_CONTINUED value, and have no
+ branches.
+
+ * sysdeps/unix/sysv/linux/waitid.c (do_waitid): Add fifth argument to
+ all three syscall uses, not just one!
+
2004-09-26 Richard Henderson <rth@redhat.com>
* sysdeps/alpha/alphaev6/memcpy.S: Mark .prologue.
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 7a862eaf51..b85d5f7846 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -1,5 +1,5 @@
# This file is updated automatically by Makefile.
glibc-branch := fedora
glibc-base := HEAD
-fedora-sync-date := 2004-09-27 06:11 UTC
-fedora-sync-tag := fedora-glibc-20040927T0611
+fedora-sync-date := 2004-09-29 08:21 UTC
+fedora-sync-tag := fedora-glibc-20040929T0821
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index 35e9dc74bd..2d32470640 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 59
+%define glibcrelease 60
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define prelinkarches noarch
%define nptlarches i386 i686 athlon x86_64 ia64 s390 s390x sparcv9 ppc ppc64
@@ -1239,6 +1239,14 @@ rm -f *.filelist*
%endif
%changelog
+* Wed Sep 29 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-60
+- update from CVS
+ - fix get_myaddress (#133982)
+ - remove nonnull attribute from second utime argument (#133866)
+ - handle SIGSETXID the same way as SIGCANCEL in
+ sigaction/pthread_kill/sigwait/sigwaitinfo etc.
+ - add __extension__ to long long types in NPTL <bits/pthreadtypes.h>
+
* Mon Sep 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-59
- update from CVS
- fix BZ #151, #362, #381, #407
diff --git a/io/utime.h b/io/utime.h
index 4b861451bc..dd5d265708 100644
--- a/io/utime.h
+++ b/io/utime.h
@@ -45,7 +45,7 @@ struct utimbuf
*FILE_TIMES. If FILE_TIMES is NULL, set them to the current time. */
extern int utime (__const char *__file,
__const struct utimbuf *__file_times)
- __THROW __nonnull ((1, 2));
+ __THROW __nonnull ((1));
__END_DECLS
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index 2062632fa1..7014099b68 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,12 @@
+2004-09-28 Ulrich Drepper <drepper@redhat.com>
+
+ * locales/nb_NO: Make language field consistent in form with nn_NO.
+
+2004-09-27 Ulrich Drepper <drepper@redhat.com>
+
+ * locales/cy_GB: Fix d_t_fmt ("a viz" -> "mis").
+ Reported by Alan Cox <alan@redhat.com>.
+
2004-08-07 Petter Reinholdtsen <pere@hungry.com>
* Makefile (test-input): Add tr_TR.UTF-8 sorting test. Test case
diff --git a/localedata/locales/cy_GB b/localedata/locales/cy_GB
index 4890754a8a..0415e78454 100644
--- a/localedata/locales/cy_GB
+++ b/localedata/locales/cy_GB
@@ -13,8 +13,8 @@ tel ""
fax ""
language "Welsh"
territory "Great Britain"
-revision "0.8"
-date "2001-01-28"
+revision "0.9"
+date "2004-09-27"
category cy_GB:2000;LC_IDENTIFICATION
category cy_GB:2000;LC_CTYPE
@@ -245,7 +245,7 @@ mon "<U0049><U006F><U006E><U0061><U0077><U0072>";/
"<U0048><U0079><U0064><U0072><U0065><U0066>";/
"<U0054><U0061><U0063><U0068><U0077><U0065><U0064><U0064>";/
"<U0052><U0068><U0061><U0067><U0066><U0079><U0072>"
-d_t_fmt "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U0061><U0020><U0076><U0069><U007A><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+d_t_fmt "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U006d><U0069><U0073><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
d_fmt "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0079>"
t_fmt "<U0025><U0054>"
am_pm "<U0041><U004D>";"<U0050><U004D>"
diff --git a/localedata/locales/nb_NO b/localedata/locales/nb_NO
index a382a2ff4e..f43a7323a3 100644
--- a/localedata/locales/nb_NO
+++ b/localedata/locales/nb_NO
@@ -28,7 +28,7 @@ contact ""
email "bug-glibc@gnu.org"
tel ""
fax ""
-language "Norwegian Bokm<U00E5>l"
+language "Norwegian, Bokm<U00E5>l"
territory "Norway"
revision "1.0"
date "2000-06-29"
diff --git a/malloc/arena.c b/malloc/arena.c
index 16574e1f7d..3adfbc45f8 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -495,7 +495,8 @@ ptmalloc_init (void)
#endif
if(s) {
if(s[0]) mALLOPt(M_CHECK_ACTION, (int)(s[0] - '0'));
- __malloc_check_init();
+ if (check_action != 0)
+ __malloc_check_init();
}
if(__malloc_initialize_hook != NULL)
(*__malloc_initialize_hook)();
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 2aff8c8dbb..aba6fc4661 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,22 @@
+2004-09-28 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/pthread_kill.c (__pthread_kill): Don't
+ allow SIGSETXID to be sent.
+ * sysdeps/pthread/sigaction.c (__sigaction): Don't allow action
+ for SIGSETXID to be defined.
+ * sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Make sure
+ SIGSETXID cannot be blocked.
+
+ * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h (pthread_cond_t):
+ Add __extension__ to long long types.
+ * sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Likewise.
+
2004-09-25 Ulrich Drepper <drepper@redhat.com>
* descr.h (struct pthread): Add stopped_start field.
diff --git a/nptl/sysdeps/pthread/pthread_sigmask.c b/nptl/sysdeps/pthread/pthread_sigmask.c
index efe186ac2c..0d12fe6bf0 100644
--- a/nptl/sysdeps/pthread/pthread_sigmask.c
+++ b/nptl/sysdeps/pthread/pthread_sigmask.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -31,13 +31,15 @@ pthread_sigmask (how, newmask, oldmask)
{
sigset_t local_newmask;
- /* The only thing we have to make sure here is that SIGCANCEL is not
- blocked. */
+ /* The only thing we have to make sure here is that SIGCANCEL and
+ SIGSETXID is not blocked. */
if (newmask != NULL
- && __builtin_expect (__sigismember (newmask, SIGCANCEL), 0))
+ && (__builtin_expect (__sigismember (newmask, SIGCANCEL), 0)
+ || __builtin_expect (__sigismember (newmask, SIGSETXID), 0)))
{
local_newmask = *newmask;
__sigdelset (&local_newmask, SIGCANCEL);
+ __sigdelset (&local_newmask, SIGSETXID);
newmask = &local_newmask;
}
diff --git a/nptl/sysdeps/pthread/sigaction.c b/nptl/sysdeps/pthread/sigaction.c
index 392cb65c90..4d36150a90 100644
--- a/nptl/sysdeps/pthread/sigaction.c
+++ b/nptl/sysdeps/pthread/sigaction.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -36,7 +36,7 @@ __sigaction (sig, act, oact)
const struct sigaction *act;
struct sigaction *oact;
{
- if (sig == SIGCANCEL)
+ if (__builtin_expect (sig == SIGCANCEL || sig == SIGSETXID, 0))
{
__set_errno (EINVAL);
return -1;
diff --git a/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
index 79d43febdd..d13d6e86a4 100644
--- a/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
@@ -77,15 +77,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
index 1db372d6a3..4d1c9450b5 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
@@ -77,15 +77,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h
index 746138e420..afb8800ac9 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h
@@ -77,9 +77,9 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index 2f8e1d9600..90c0695697 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
@@ -97,15 +97,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_kill.c b/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
index 87577be4dc..9115d6f40b 100644
--- a/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
+++ b/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -37,8 +37,9 @@ __pthread_kill (threadid, signo)
/* Not a valid thread handle. */
return ESRCH;
- /* Disallow sending the signal we use for cancellation. */
- if (signo == SIGCANCEL || signo == SIGTIMER)
+ /* Disallow sending the signal we use for cancellation, timers, for
+ for the setxid implementation. */
+ if (signo == SIGCANCEL || signo == SIGTIMER || signo == SIGSETXID)
return EINVAL;
/* We have a special syscall to do the work. */
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
index 9d7490444d..6b3618cd57 100644
--- a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
@@ -96,15 +96,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
index 914351a3e2..5125408dcb 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
@@ -78,15 +78,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
index c894f12495..3c5a289445 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
@@ -97,15 +97,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
index 6b996a412a..03c2ef8106 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
@@ -96,15 +96,15 @@ typedef union
{
int __lock;
unsigned int __futex;
- unsigned long long int __total_seq;
- unsigned long long int __wakeup_seq;
- unsigned long long int __woken_seq;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
void *__mutex;
int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[__SIZEOF_PTHREAD_COND_T];
- long long int __align;
+ __extension__ long long int __align;
} pthread_cond_t;
typedef union
diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c
index 627fe8cf9d..a9eac48ac8 100644
--- a/nscd/nscd_getai.c
+++ b/nscd/nscd_getai.c
@@ -38,7 +38,7 @@ libc_locked_map_ptr (map_handle);
/* Note that we only free the structure if necessary. The memory
mapping is not removed since it is not visible to the malloc
handling. */
-libc_freeres_fn (gr_map_free)
+libc_freeres_fn (ai_map_free)
{
if (map_handle.mapped != NO_MAPPING)
@@ -63,7 +63,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
struct mapped_database *mapped = __nscd_get_map_ref (GETFDHST, "hosts",
&map_handle, &gc_cycle);
retry:
- if (mapped != MAP_FAILED)
+ if (mapped != NO_MAPPING)
{
const struct datahead *found = __nscd_cache_search (GETAI, key, keylen,
mapped);
@@ -86,7 +86,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
{
/* nscd not running or wrong version or hosts caching disabled. */
__nss_not_use_nscd_hosts = 1;
- goto out;;
+ goto out;
}
ai_resp = &ai_resp_mem;
diff --git a/posix/sys/wait.h b/posix/sys/wait.h
index e758f9e3ff..372d46c79a 100644
--- a/posix/sys/wait.h
+++ b/posix/sys/wait.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1994,1996-2001,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1994,1996-2001,2003,2004 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
@@ -30,7 +30,7 @@ __BEGIN_DECLS
#include <signal.h>
#include <sys/resource.h>
-/* These macros could also be defined int <stdlib.h>. */
+/* These macros could also be defined in <stdlib.h>. */
#if !defined _STDLIB_H || !defined __USE_XOPEN
/* This will define the `W*' macros for the flag
bits to `waitpid', `wait3', and `wait4'. */
@@ -84,6 +84,9 @@ typedef union
# define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status))
# define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status))
# define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status))
+# ifdef __WIFCONTINUED
+# define WIFCONTINUED(status) __WIFCONTINUED(__WAIT_INT(status))
+# endif
#endif /* <stdlib.h> not included. */
#ifdef __USE_BSD
diff --git a/posix/tst-waitid.c b/posix/tst-waitid.c
index 3e81d7a0ac..642d529a9a 100644
--- a/posix/tst-waitid.c
+++ b/posix/tst-waitid.c
@@ -335,6 +335,77 @@ do_test (int argc, char *argv[])
info.si_signo);
RETURN (EXIT_FAILURE);
}
+
+ /* Now stop him again and test waitpid with WCONTINUED. */
+ expecting_sigchld = 1;
+ if (kill (pid, SIGSTOP) != 0)
+ {
+ error (0, errno, "kill (%d, SIGSTOP)", pid);
+ RETURN (EXIT_FAILURE);
+ }
+ pid_t wpid = waitpid (pid, &fail, WUNTRACED);
+ if (wpid < 0)
+ {
+ error (0, errno, "waitpid WUNTRACED on stopped");
+ RETURN (EXIT_FAILURE);
+ }
+ else if (wpid != pid)
+ {
+ error (0, 0,
+ "waitpid WUNTRACED on stopped returned %d != %d (status %x)",
+ wpid, pid, fail);
+ RETURN (EXIT_FAILURE);
+ }
+ else if (!WIFSTOPPED (fail) || WIFSIGNALED (fail) || WIFEXITED (fail)
+ || WIFCONTINUED (fail) || WSTOPSIG (fail) != SIGSTOP)
+ {
+ error (0, 0, "waitpid WUNTRACED on stopped: status %x", fail);
+ RETURN (EXIT_FAILURE);
+ }
+ CHECK_SIGCHLD ("stopped", CLD_STOPPED, SIGSTOP);
+
+ expecting_sigchld = 1;
+ if (kill (pid, SIGCONT) != 0)
+ {
+ error (0, errno, "kill (%d, SIGCONT)", pid);
+ RETURN (EXIT_FAILURE);
+ }
+
+ /* Wait for the child to have continued. */
+ sleep (2);
+
+ if (expecting_sigchld)
+ {
+ error (0, 0, "no SIGCHLD seen for SIGCONT (optional)");
+ expecting_sigchld = 0;
+ }
+ else
+ CHECK_SIGCHLD ("continued", CLD_CONTINUED, SIGCONT);
+
+ wpid = waitpid (pid, &fail, WCONTINUED);
+ if (wpid < 0)
+ {
+ if (errno == EINVAL)
+ error (0, 0, "waitpid does not support WCONTINUED");
+ else
+ {
+ error (0, errno, "waitpid WCONTINUED on continued");
+ RETURN (EXIT_FAILURE);
+ }
+ }
+ else if (wpid != pid)
+ {
+ error (0, 0,
+ "waitpid WCONTINUED on continued returned %d != %d (status %x)",
+ wpid, pid, fail);
+ RETURN (EXIT_FAILURE);
+ }
+ else if (WIFSTOPPED (fail) || WIFSIGNALED (fail) || WIFEXITED (fail)
+ || !WIFCONTINUED (fail))
+ {
+ error (0, 0, "waitpid WCONTINUED on continued: status %x", fail);
+ RETURN (EXIT_FAILURE);
+ }
#endif
expecting_sigchld = 1;
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index dc0c712df7..e4f79369a6 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -88,6 +88,9 @@ typedef union
# define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status))
# define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status))
# define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status))
+# ifdef __WIFCONTINUED
+# define WIFCONTINUED(status) __WIFCONTINUED(__WAIT_INT(status))
+# endif
#endif /* X/Open and <sys/wait.h> not included. */
__BEGIN_NAMESPACE_STD
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 6431324f3e..284e355cc3 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1994-2001, 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 1994-2001, 2002, 2003, 2004 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
@@ -85,6 +85,8 @@ all: # Make this the default target; it will be defined in Rules.
include ../Makeconfig
+xtests := tst-getmyaddr
+
ifeq ($(have-thread-library),yes)
xtests += thrsvc
endif
diff --git a/sunrpc/Versions b/sunrpc/Versions
index b800172e08..cddf188766 100644
--- a/sunrpc/Versions
+++ b/sunrpc/Versions
@@ -113,4 +113,7 @@ libc {
__rpc_thread_svc_fdset; __rpc_thread_createerr;
__rpc_thread_svc_pollfd; __rpc_thread_svc_max_pollfd;
}
+ GLIBC_2.3.4 {
+ xdr_quad_t; xdr_u_quad_t;
+ }
}
diff --git a/sunrpc/get_myaddr.c b/sunrpc/get_myaddr.c
index ee822970f9..c0beee9c59 100644
--- a/sunrpc/get_myaddr.c
+++ b/sunrpc/get_myaddr.c
@@ -63,7 +63,7 @@ get_myaddress (struct sockaddr_in *addr)
{
struct ifaddrs *ifa;
- if (getifaddrs (&ifa) == 0)
+ if (getifaddrs (&ifa) != 0)
{
perror ("get_myaddress: getifaddrs");
exit (1);
diff --git a/sunrpc/pmap_clnt.c b/sunrpc/pmap_clnt.c
index c968511e96..aa5740c8a0 100644
--- a/sunrpc/pmap_clnt.c
+++ b/sunrpc/pmap_clnt.c
@@ -57,7 +57,7 @@ __get_myaddress (struct sockaddr_in *addr)
{
struct ifaddrs *ifa;
- if (getifaddrs (&ifa) == 0)
+ if (getifaddrs (&ifa) != 0)
{
perror ("get_myaddress: getifaddrs");
exit (1);
diff --git a/sunrpc/pmap_rmt.c b/sunrpc/pmap_rmt.c
index e446f5e608..4ff707ad15 100644
--- a/sunrpc/pmap_rmt.c
+++ b/sunrpc/pmap_rmt.c
@@ -179,7 +179,7 @@ getbroadcastnets (struct in_addr *addrs, int naddrs)
{
struct ifaddrs *ifa;
- if (getifaddrs (&ifa) == 0)
+ if (getifaddrs (&ifa) != 0)
{
perror ("broadcast: getifaddrs");
return 0;
diff --git a/sunrpc/rpc/xdr.h b/sunrpc/rpc/xdr.h
index 64ac42fc5b..ba9691d1af 100644
--- a/sunrpc/rpc/xdr.h
+++ b/sunrpc/rpc/xdr.h
@@ -303,6 +303,8 @@ extern bool_t xdr_int32_t (XDR *__xdrs, int32_t *__ip) __THROW;
extern bool_t xdr_uint32_t (XDR *__xdrs, uint32_t *__up) __THROW;
extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
+extern bool_t xdr_quad_t (XDR *__xdrs, quad_t *__ip) __THROW;
+extern bool_t xdr_u_quad_t (XDR *__xdrs, u_quad_t *__up) __THROW;
extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
extern bool_t xdr_array (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep,
diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
index b036aa456d..d6eda42309 100644
--- a/sunrpc/rpc_parse.c
+++ b/sunrpc/rpc_parse.c
@@ -621,10 +621,10 @@ get_type (const char **prefixp, const char **typep, defkind dkind)
*typep = "long";
(void) peekscan (TOK_INT, &tok);
break;
- case TOK_HYPER:
- *typep = "int64_t";
+ case TOK_HYPER:
+ *typep = "quad_t";
(void) peekscan(TOK_INT, &tok);
- break;
+ break;
case TOK_VOID:
if (dkind != DEF_UNION && dkind != DEF_PROGRAM)
{
@@ -668,11 +668,11 @@ unsigned_dec (const char **typep)
*typep = "u_long";
(void) peekscan (TOK_INT, &tok);
break;
- case TOK_HYPER:
+ case TOK_HYPER:
get_token (&tok);
- *typep = "uint64_t";
+ *typep = "u_quad_t";
(void) peekscan(TOK_INT, &tok);
- break;
+ break;
case TOK_INT:
get_token (&tok);
*typep = "u_int";
diff --git a/sunrpc/tst-getmyaddr.c b/sunrpc/tst-getmyaddr.c
new file mode 100644
index 0000000000..1eaf9b22ca
--- /dev/null
+++ b/sunrpc/tst-getmyaddr.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <rpc/clnt.h>
+
+
+static int
+do_test (void)
+{
+ struct sockaddr_in ad;
+ struct sockaddr_in ad2;
+ memset (&ad, '\0', sizeof (ad));
+ memset (&ad2, '\0', sizeof (ad2));
+
+ get_myaddress (&ad);
+
+ printf ("addr = %s:%d\n", inet_ntoa (ad.sin_addr), ad.sin_port);
+
+ return memcmp (&ad, &ad2, sizeof (ad)) == 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/sunrpc/xdr_intXX_t.c b/sunrpc/xdr_intXX_t.c
index d36d1623bc..9d2f92e10d 100644
--- a/sunrpc/xdr_intXX_t.c
+++ b/sunrpc/xdr_intXX_t.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (c) 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998.
@@ -18,7 +18,14 @@
02111-1307 USA. */
#include <rpc/types.h>
+
+/* We play dirty tricks with aliases. */
+#define xdr_quad_t Xdr_quad_t
+#define xdr_u_quad_t Xdr_u_quad_t
#include <rpc/xdr.h>
+#undef xdr_quad_t
+#undef xdr_u_quad_t
+
/* XDR 64bit integers */
bool_t
@@ -47,6 +54,7 @@ xdr_int64_t (XDR *xdrs, int64_t *ip)
return FALSE;
}
}
+strong_alias (xdr_int64_t, xdr_quad_t)
/* XDR 64bit unsigned integers */
bool_t
@@ -75,6 +83,7 @@ xdr_uint64_t (XDR *xdrs, uint64_t *uip)
return FALSE;
}
}
+strong_alias (xdr_int64_t, xdr_u_quad_t)
/* XDR 32bit integers */
bool_t
diff --git a/sysdeps/generic/bits/waitstatus.h b/sysdeps/generic/bits/waitstatus.h
index 982c9dbb28..699c224989 100644
--- a/sysdeps/generic/bits/waitstatus.h
+++ b/sysdeps/generic/bits/waitstatus.h
@@ -1,5 +1,5 @@
/* Definitions of status bits for `wait' et al.
- Copyright (C) 1992, 1994, 1996, 1997, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1992,1994,1996,1997,2000,2004 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
@@ -38,23 +38,25 @@
#define __WIFEXITED(status) (__WTERMSIG(status) == 0)
/* Nonzero if STATUS indicates termination by a signal. */
-#ifdef __GNUC__
-# define __WIFSIGNALED(status) \
- (__extension__ ({ int __status = (status); \
- !__WIFSTOPPED(__status) && !__WIFEXITED(__status); }))
-#else /* Not GCC. */
-# define __WIFSIGNALED(status) (!__WIFSTOPPED(status) && !__WIFEXITED(status))
-#endif /* GCC. */
+#define __WIFSIGNALED(status) \
+ (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
/* Nonzero if STATUS indicates the child is stopped. */
#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
+/* Nonzero if STATUS indicates the child continued after a stop. We only
+ define this if <bits/waitflags.h> provides the WCONTINUED flag bit. */
+#ifdef WCONTINUED
+# define __WIFCONTINUED(status) ((status) == __W_CONTINUED)
+#endif
+
/* Nonzero if STATUS indicates the child dumped core. */
#define __WCOREDUMP(status) ((status) & __WCOREFLAG)
/* Macros for constructing status values. */
#define __W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f)
+#define __W_CONTINUED 0xffff
#define __WCOREFLAG 0x80
diff --git a/sysdeps/generic/sigfillset.c b/sysdeps/generic/sigfillset.c
index 5f91fa6bda..95d52cf0c0 100644
--- a/sysdeps/generic/sigfillset.c
+++ b/sysdeps/generic/sigfillset.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,96,97,2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991,96,97,2002,2003,2004 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,6 +37,10 @@ sigfillset (set)
#ifdef SIGCANCEL
__sigdelset (set, SIGCANCEL);
#endif
+ /* Likewise for the signal to implement setxid. */
+#ifdef SIGSETXID
+ __sigdelset (set, SIGSETXID);
+#endif
return 0;
}
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 4b5b8f22e7..c48d9d325e 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -388,7 +388,7 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc,
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
MAP is the object containing the reloc. */
-static inline void
+auto inline void
__attribute ((always_inline))
elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
const Elf32_Sym *sym, const struct r_found_version *version,
@@ -533,7 +533,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
}
#ifndef RTLD_BOOTSTRAP
-static inline void
+auto inline void
+__attribute__ ((always_inline))
elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
const Elf32_Sym *sym, const struct r_found_version *version,
void *const reloc_addr_arg)
@@ -639,7 +640,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
}
#endif /* !RTLD_BOOTSTRAP */
-static inline void
+auto inline void
__attribute ((always_inline))
elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
void *const reloc_addr_arg)
@@ -650,7 +651,8 @@ elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
}
#ifndef RTLD_BOOTSTRAP
-static inline void
+auto inline void
+__attribute__ ((always_inline))
elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
void *const reloc_addr_arg)
{
@@ -659,7 +661,8 @@ elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
}
#endif /* !RTLD_BOOTSTRAP */
-static inline void
+auto inline void
+__attribute__ ((always_inline))
elf_machine_lazy_rel (struct link_map *map,
Elf32_Addr l_addr, const Elf32_Rel *reloc)
{
@@ -680,7 +683,8 @@ elf_machine_lazy_rel (struct link_map *map,
#ifndef RTLD_BOOTSTRAP
-static inline void
+auto inline void
+__attribute__ ((always_inline))
elf_machine_lazy_rela (struct link_map *map,
Elf32_Addr l_addr, const Elf32_Rela *reloc)
{
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index 20e60de393..eb45709be1 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -556,6 +556,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
}
else
return -EAI_ADDRFAMILY;
+
+ dupname:
+ if (req->ai_flags & AI_CANONNAME)
+ {
+ canon = strdup (name);
+ if (canon == NULL)
+ return -EAI_MEMORY;
+ }
}
if (at->family == AF_UNSPEC)
@@ -603,6 +611,8 @@ gaih_inet (const char *name, const struct gaih_service *service,
return GAIH_OKIFUNSPEC | -EAI_NONAME;
}
}
+
+ goto dupname;
}
}
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
index c3abe80de6..52d00e9da9 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
@@ -93,7 +93,7 @@ typedef struct siginfo
{
void *si_addr; /* Faulting insn/memory ref. */
int _si_imm;
- int _si_pad0;
+ unsigned int _si_flags;
unsigned long int _si_isr;
} _sigfault;
@@ -124,6 +124,7 @@ typedef struct siginfo
#ifdef __USE_GNU
# define si_imm _sifields._sigfault._si_imm
+# define si_flags _sifields._sigfault._si_flags
# define si_isr _sifields._sigfault._si_isr
#endif
diff --git a/sysdeps/unix/sysv/linux/sigprocmask.c b/sysdeps/unix/sysv/linux/sigprocmask.c
index e1b57566a5..1573780d8e 100644
--- a/sysdeps/unix/sysv/linux/sigprocmask.c
+++ b/sysdeps/unix/sysv/linux/sigprocmask.c
@@ -43,12 +43,20 @@ __sigprocmask (how, set, oset)
#ifdef SIGCANCEL
sigset_t local_newmask;
- /* The only thing we have to make sure here is that SIGCANCEL is not
- blocked. */
- if (set != NULL && __builtin_expect (__sigismember (set, SIGCANCEL), 0))
+ /* The only thing we have to make sure here is that SIGCANCEL and
+ SIGSETXID are not blocked. */
+ if (set != NULL
+ && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+ || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+ ))
{
local_newmask = *set;
__sigdelset (&local_newmask, SIGCANCEL);
+# ifdef SIGSETXID
+ __sigdelset (&local_newmask, SIGSETXID);
+# endif
set = &local_newmask;
}
#endif
diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c
index 1705cb10bd..adeadc1587 100644
--- a/sysdeps/unix/sysv/linux/sigtimedwait.c
+++ b/sysdeps/unix/sysv/linux/sigtimedwait.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000,2002,2003,2004 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,12 +32,20 @@ do_sigtimedwait (const sigset_t *set, siginfo_t *info,
{
#ifdef SIGCANCEL
sigset_t tmpset;
- if (set != NULL && __sigismember (set, SIGCANCEL))
+ if (set != NULL
+ && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+ || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+ ))
{
/* Create a temporary mask without the bit for SIGCANCEL set. */
// We are not copying more than we have to.
memcpy (&tmpset, set, _NSIG / 8);
__sigdelset (&tmpset, SIGCANCEL);
+# ifdef SIGSETXID
+ __sigdelset (&tmpset, SIGSETXID);
+# endif
set = &tmpset;
}
#endif
diff --git a/sysdeps/unix/sysv/linux/sigwait.c b/sysdeps/unix/sysv/linux/sigwait.c
index f755928493..7c865963cd 100644
--- a/sysdeps/unix/sysv/linux/sigwait.c
+++ b/sysdeps/unix/sysv/linux/sigwait.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000,2002,2003,2004 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,12 +36,20 @@ do_sigwait (const sigset_t *set, int *sig)
#ifdef SIGCANCEL
sigset_t tmpset;
- if (set != NULL && __sigismember (set, SIGCANCEL))
+ if (set != NULL
+ && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+ || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+ ))
{
/* Create a temporary mask without the bit for SIGCANCEL set. */
// We are not copying more than we have to.
memcpy (&tmpset, set, _NSIG / 8);
__sigdelset (&tmpset, SIGCANCEL);
+# ifdef SIGSETXID
+ __sigdelset (&tmpset, SIGSETXID);
+# endif
set = &tmpset;
}
#endif
diff --git a/sysdeps/unix/sysv/linux/sigwaitinfo.c b/sysdeps/unix/sysv/linux/sigwaitinfo.c
index a2dec820fc..a51a01f20b 100644
--- a/sysdeps/unix/sysv/linux/sigwaitinfo.c
+++ b/sysdeps/unix/sysv/linux/sigwaitinfo.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000,2002,2003,2004 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
@@ -33,12 +33,20 @@ do_sigwaitinfo (const sigset_t *set, siginfo_t *info)
{
#ifdef SIGCANCEL
sigset_t tmpset;
- if (set != NULL && __sigismember (set, SIGCANCEL))
+ if (set != NULL
+ && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+ || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+ ))
{
/* Create a temporary mask without the bit for SIGCANCEL set. */
// We are not copying more than we have to.
memcpy (&tmpset, set, _NSIG / 8);
__sigdelset (&tmpset, SIGCANCEL);
+# ifdef SIGSETXID
+ __sigdelset (&tmpset, SIGSETXID);
+# endif
set = &tmpset;
}
#endif
diff --git a/sysdeps/unix/sysv/linux/waitid.c b/sysdeps/unix/sysv/linux/waitid.c
index 21226df37e..207c3d3453 100644
--- a/sysdeps/unix/sysv/linux/waitid.c
+++ b/sysdeps/unix/sysv/linux/waitid.c
@@ -47,10 +47,11 @@ do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options)
{
static int waitid_works;
if (waitid_works > 0)
- return INLINE_SYSCALL (waitid, 4, idtype, id, infop, options);
+ return INLINE_SYSCALL (waitid, 5, idtype, id, infop, options, NULL);
if (waitid_works == 0)
{
- int result = INLINE_SYSCALL (waitid, 4, idtype, id, infop, options);
+ int result = INLINE_SYSCALL (waitid, 5,
+ idtype, id, infop, options, NULL);
if (result < 0 && errno == ENOSYS)
waitid_works = -1;
else