summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog30
-rw-r--r--bits/select.h6
-rw-r--r--bits/types.h23
-rw-r--r--conform/conformtest.pl108
-rw-r--r--conform/data/sys/mman.h-data18
-rw-r--r--conform/data/sys/select.h-data33
-rw-r--r--conform/data/sys/time.h-data5
-rw-r--r--include/sys/select.h10
-rw-r--r--misc/sys/select.h72
-rw-r--r--signal/signal.h14
-rw-r--r--sysdeps/generic/bits/select.h6
-rw-r--r--sysdeps/generic/bits/types.h23
-rw-r--r--sysdeps/i386/bits/select.h8
-rw-r--r--sysdeps/unix/sysv/aix/bits/types.h24
-rw-r--r--sysdeps/unix/sysv/hpux/bits/types.h24
-rw-r--r--sysdeps/unix/sysv/linux/alpha/bits/types.h28
-rw-r--r--sysdeps/unix/sysv/linux/bits/types.h24
-rw-r--r--sysdeps/unix/sysv/linux/ia64/bits/types.h28
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/types.h24
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/types.h29
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/bits/types.h22
-rw-r--r--time/sys/time.h8
22 files changed, 249 insertions, 318 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ffd41525a..6e2e5c80cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2001-01-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* signal/signal.h: Fix handling of __need_* symbols.
+	* misc/sys/select.c: Define fd_set here.  Remove __fd_set.  Define
+	fd_mask only if __USE_MISC.  Declare pselect for __USE_XOPEN2K.
+	* include/sys/select.h: Use fd_set not __fd_set.
+	* sysdeps/generic/bits/select.h: Likewise.
+	* sysdeps/i386/bits/select.h: Likewise.
+	* sysdeps/generic/bits/types.h: Don't define __fd_mask, __NFDBITS,
+	__FDELT, __FDMASK, and __fd_set here.
+	* sysdeps/unix/sysv/aix/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/hpux/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/linux/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/linux/ia64/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/bits/types.h: Likewise.
+	* sysdeps/unix/sysv/sysv4/solaris2/bits/types.h: Likewise.
+	* time/sys/time.h: Define struct timeval before including <time.h>
+	and <sys/select.h>.
+
+	* conform/data/sys/time.h-data: fd_set is a typedef.
+	* conform/data/sys/select.h-data: New file.
+	* conform/data/sys/mman.h-data: Make typed mem stuff optional.
+	* conform/conformtest.pl (@headers): Add sys/select.h.
+	(type, optional-type): Unless testing a typedef instantiate object.
+	Implement optional-function.
+
+	* math/test-misc.c: Include <float.h>.
+
 2001-01-27  Andreas Jaeger  <aj@suse.de>
 
 	* misc/efgcvt_r.c: Include <float.h>.
diff --git a/bits/select.h b/bits/select.h
index 4513135af9..dfe623eca7 100644
--- a/bits/select.h
+++ b/bits/select.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2001 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,8 +26,8 @@
 #define __FD_ZERO(s) \
   do {									      \
     unsigned int __i;							      \
-    __fd_set *__arr = (s);						      \
-    for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i)	      \
+    fd_set *__arr = (s);						      \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)	      \
       __FDS_BITS (__arr)[__i] = 0;					      \
   } while (0)
 #define __FD_SET(d, s)     (__FDS_BITS (s)[__FDELT(d)] |= __FDMASK(d))
diff --git a/bits/types.h b/bits/types.h
index fd2ec223ea..13d7120f2f 100644
--- a/bits/types.h
+++ b/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,1992,94-1999,2000,2001 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
@@ -93,30 +93,9 @@ typedef int __clockid_t;
 typedef int __timer_t;
 
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE	256
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define	__NFDBITS	(sizeof (unsigned long int) * 8)
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
 
 /* XXX Used in `struct shmid_ds'.  */
 typedef unsigned short int __ipc_pid_t;
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index 1357bb33d5..b0220f5991 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -15,18 +15,18 @@ if (@headers == ()) {
 	      "termios.h", "tar.h", "sys/wait.h", "sys/utsname.h", "sys/un.h",
 	      "sys/uio.h", "sys/types.h", "sys/times.h", "sys/timeb.h",
 	      "sys/time.h", "sys/statvfs.h", "sys/stat.h", "sys/socket.h",
-	      "sys/shm.h", "sys/sem.h", "sys/resource.h", "sys/msg.h",
-	      "sys/mman.h", "sys/ipc.h", "syslog.h", "stropts.h", "strings.h",
-	      "string.h", "stdlib.h", "stdio.h", "stdint.h", "stddef.h",
-	      "stdarg.h", "spawn.h", "signal.h", "setjmp.h", "semaphore.h",
-	      "search.h", "sched.h", "regex.h", "pwd.h", "pthread.h",
-	      "poll.h", "nl_types.h", "netinet/tcp.h", "netinet/in.h",
-	      "net/if.h", "netdb.h", "ndbm.h", "mqueue.h", "monetary.h",
-	      "math.h", "locale.h", "libgen.h", "limits.h", "langinfo.h",
-	      "iso646.h", "inttypes.h", "iconv.h", "grp.h", "glob.h", "ftw.h",
-	      "fnmatch.h", "fmtmsg.h", "float.h", "fcntl.h", "errno.h",
-	      "dlfcn.h", "dirent.h", "ctype.h", "cpio.h", "assert.h",
-	      "arpa/inet.h", "aio.h");
+	      "sys/shm.h", "sys/sem.h", "sys/select.h", "sys/resource.h",
+	      "sys/msg.h", "sys/mman.h", "sys/ipc.h", "syslog.h", "stropts.h",
+	      "strings.h", "string.h", "stdlib.h", "stdio.h", "stdint.h",
+	      "stddef.h", "stdarg.h", "spawn.h", "signal.h", "setjmp.h",
+	      "semaphore.h", "search.h", "sched.h", "regex.h", "pwd.h",
+	      "pthread.h", "poll.h", "nl_types.h", "netinet/tcp.h",
+	      "netinet/in.h", "net/if.h", "netdb.h", "ndbm.h", "mqueue.h",
+	      "monetary.h", "math.h", "locale.h", "libgen.h", "limits.h",
+	      "langinfo.h", "iso646.h", "inttypes.h", "iconv.h", "grp.h",
+	      "glob.h", "ftw.h", "fnmatch.h", "fmtmsg.h", "float.h", "fcntl.h",
+	      "errno.h", "dlfcn.h", "dirent.h", "ctype.h", "cpio.h",
+	      "assert.h", "arpa/inet.h", "aio.h");
 }
 
 if ($dialect ne "ISO" && $dialect ne "POSIX" && $dialect ne "XPG3"
@@ -590,6 +590,7 @@ while ($#headers >= 0) {
       }
     } elsif (/^optional-type *({([^}]*)|([a-zA-Z0-9_]*))/) {
       my($type) = "$2$3";
+      my($maybe_opaque) = 0;
 
       # Remember that this name is allowed.
       if ($type =~ /^struct *(.*)/) {
@@ -598,6 +599,7 @@ while ($#headers >= 0) {
 	push @allow, $1;
       } else {
 	push @allow, $type;
+	$maybe_opaque = 1;
       }
 
       # Remember that this name is allowed.
@@ -607,13 +609,18 @@ while ($#headers >= 0) {
       open (TESTFILE, ">$fnamebase.c");
       print TESTFILE "$prepend";
       print TESTFILE "#include <$h>\n";
-      print TESTFILE "$type *a;\n";
+      if ($maybe_opaque == 1) {
+	print TESTFILE "$type *a;\n";
+      } else {
+	print TESTFILE "$type a;\n";
+      }
       close (TESTFILE);
 
       compiletest ($fnamebase, "Testing for type $type",
-		   "Type \"$type\" not available.", $missing, 1);
+		   "NOT AVAILABLE", $missing, 1);
     } elsif (/^type *({([^}]*)|([a-zA-Z0-9_]*))/) {
       my($type) = "$2$3";
+      my($maybe_opaque) = 0;
 
       # Remember that this name is allowed.
       if ($type =~ /^struct *(.*)/) {
@@ -622,6 +629,7 @@ while ($#headers >= 0) {
 	push @allow, $1;
       } else {
 	push @allow, $type;
+	$maybe_opaque = 1;
       }
 
       # Remember that this name is allowed.
@@ -631,11 +639,48 @@ while ($#headers >= 0) {
       open (TESTFILE, ">$fnamebase.c");
       print TESTFILE "$prepend";
       print TESTFILE "#include <$h>\n";
-      print TESTFILE "$type *a;\n";
+      if ($maybe_opaque == 1) {
+	print TESTFILE "$type *a;\n";
+      } else {
+	print TESTFILE "$type a;\n";
+      }
       close (TESTFILE);
 
       compiletest ($fnamebase, "Testing for type $type",
 		   "Type \"$type\" not available.", $missing, 0);
+    } elsif (/^optional-function *({([^}]*)}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) {
+      my($rettype) = "$2$3";
+      my($fname) = "$4";
+      my($args) = "$5";
+      my($res) = $missing;
+
+      # Remember that this name is allowed.
+      push @allow, $fname;
+
+      # Generate a program to test for availability of this function.
+      open (TESTFILE, ">$fnamebase.c");
+      print TESTFILE "$prepend";
+      print TESTFILE "#include <$h>\n";
+      # print TESTFILE "#undef $fname\n";
+      print TESTFILE "$rettype (*(*foobarbaz) $args = $fname;\n";
+      close (TESTFILE);
+
+      $res = compiletest ($fnamebase, "Test availability of function $fname",
+			  "NOT AVAILABLE", $res, 1);
+
+      if ($res == 0 || $missing == 1) {
+	# Generate a program to test for the type of this function.
+	open (TESTFILE, ">$fnamebase.c");
+	print TESTFILE "$prepend";
+	print TESTFILE "#include <$h>\n";
+	# print TESTFILE "#undef $fname\n";
+	print TESTFILE "extern $rettype (*(*foobarbaz) $args;\n";
+	print TESTFILE "extern __typeof__ (&$fname) foobarbaz;\n";
+	close (TESTFILE);
+
+	compiletest ($fnamebase, "Test for type of function $fname",
+		     "Function \"$fname\" has incorrect type.", $res, 0);
+      }
     } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) {
       my($rettype) = "$2$3";
       my($fname) = "$4";
@@ -667,6 +712,39 @@ while ($#headers >= 0) {
 
       compiletest ($fnamebase, "Test for type of function $fname",
 		   "Function \"$fname\" has incorrect type.", $res, 0);
+    } elsif (/^optional-function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) {
+      my($rettype) = "$2$3";
+      my($fname) = "$4";
+      my($args) = "$5";
+      my($res) = $missing;
+
+      # Remember that this name is allowed.
+      push @allow, $fname;
+
+      # Generate a program to test for availability of this function.
+      open (TESTFILE, ">$fnamebase.c");
+      print TESTFILE "$prepend";
+      print TESTFILE "#include <$h>\n";
+      # print TESTFILE "#undef $fname\n";
+      print TESTFILE "$rettype (*foobarbaz) $args = $fname;\n";
+      close (TESTFILE);
+
+      $res = compiletest ($fnamebase, "Test availability of function $fname",
+			  "NOT AVAILABLE", $res, 1);
+
+      if ($res == 0 || $missing != 0) {
+	# Generate a program to test for the type of this function.
+	open (TESTFILE, ">$fnamebase.c");
+	print TESTFILE "$prepend";
+	print TESTFILE "#include <$h>\n";
+	# print TESTFILE "#undef $fname\n";
+	print TESTFILE "extern $rettype (*foobarbaz) $args;\n";
+	print TESTFILE "extern __typeof__ (&$fname) foobarbaz;\n";
+	close (TESTFILE);
+
+	compiletest ($fnamebase, "Test for type of function $fname",
+		     "Function \"$fname\" has incorrect type.", $res, 0);
+      }
     } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) {
       my($rettype) = "$2$3";
       my($fname) = "$4";
diff --git a/conform/data/sys/mman.h-data b/conform/data/sys/mman.h-data
index d744a9ef22..c737efbc23 100644
--- a/conform/data/sys/mman.h-data
+++ b/conform/data/sys/mman.h-data
@@ -22,17 +22,16 @@ constant POSIX_MADV_RANDOM
 constant POSIX_MADV_WILLNEED
 constant POSIX_MADV_DONTNEED
 
-constant POSIX_TYPED_MEM_ALLOCATE
-constant POSIX_TYPED_MEM_ALLOCATE_CONTIG
-constant POSIX_TYPED_MEM_MAP_ALLOCATABLE
+optional-constant POSIX_TYPED_MEM_ALLOCATE
+optional-constant POSIX_TYPED_MEM_ALLOCATE_CONTIG
+optional-constant POSIX_TYPED_MEM_MAP_ALLOCATABLE
 
 type size_t
 type off_t
 type mode_t
 
-type {struct posix_typedmem_info}
-
-element {struct posix_typedmem_info} size_t posix_tmi_length
+optional-type {struct posix_typedmem_info}
+optional-element {struct posix_typedmem_info} size_t posix_tmi_length
 
 function int mlock (const void*, size_t)
 function int mlockall (int)
@@ -42,9 +41,10 @@ function int msync (void*, size_t, int)
 function int munlock (const void*, size_t)
 function int munlockall (void)
 function int munmap (void*, size_t)
-function int posix_mem_offset (const void*, size_t, off_t*, size_t*, int*)
-function int posix_typed_mem_get_info (int, struct posix_typed_mem_info*)
-function int posix_typed_mem_open (const char*, int, int)
+function int posix_madvise (void*, size_t, int)
+optional-function int posix_mem_offset (const void*, size_t, off_t*, size_t*, int*)
+optional-function int posix_typed_mem_get_info (int, struct posix_typed_mem_info*)
+optional-function int posix_typed_mem_open (const char*, int, int)
 function int shm_open (const char*, int, mode_t)
 function int shm_unlink (const char*)
 
diff --git a/conform/data/sys/select.h-data b/conform/data/sys/select.h-data
new file mode 100644
index 0000000000..ade26a4e5a
--- /dev/null
+++ b/conform/data/sys/select.h-data
@@ -0,0 +1,33 @@
+#if !defined ISO && !defined POSIX
+type {struct timeval}
+element {struct timeval} time_t tv_sec
+element {struct timeval} suseconds_t tv_usec
+
+type time_t
+type suseconds_t
+
+type sigset_t
+
+type {struct timespec}
+element {struct timespec} time_t tv_sec
+element {struct timespec} long tv_nsec
+
+type fd_set
+element fd_set long fds_bits []
+
+function-macro void FD_CLR (int, fd_set*)
+function-macro int FD_ISSET (int, fd_set*)
+function-macro void FD_SET (int, fd_set*)
+function-macro void FD_ZERO (fd_set*)
+
+macro FD_SETSIZE
+
+#ifdef XOPEN2K
+function int pselect (int, fd_set*, fd_set*, fd_set*, const struct timespec*, const sigset_t*)
+#endif
+function int select (int, fd_set*, fd_set*, fd_set*, struct timeval*)
+
+allow-header signal.h
+allow-header sys/time.h
+allow-header time.h
+#endif
diff --git a/conform/data/sys/time.h-data b/conform/data/sys/time.h-data
index 49d5fbc2d1..0de8c278fc 100644
--- a/conform/data/sys/time.h-data
+++ b/conform/data/sys/time.h-data
@@ -11,9 +11,8 @@ element {struct itimerval} {struct timeval} it_value
 type time_t
 type suseconds_t
 
-type {struct fd_set}
-
-element {struct fd_set} long fds_bits []
+type fd_set
+element fd_set long fds_bits []
 
 constant ITIMER_REAL
 constant ITIMER_VIRTUAL
diff --git a/include/sys/select.h b/include/sys/select.h
index 645929578c..583149c9ee 100644
--- a/include/sys/select.h
+++ b/include/sys/select.h
@@ -2,13 +2,13 @@
 #include <misc/sys/select.h>
 
 /* Now define the internal interfaces.  */
-extern int __pselect (int __nfds, __fd_set *__readfds,
-		      __fd_set *__writefds, __fd_set *__exceptfds,
+extern int __pselect (int __nfds, fd_set *__readfds,
+		      fd_set *__writefds, fd_set *__exceptfds,
 		      const struct timespec *__timeout,
 		      const __sigset_t *__sigmask);
 
-extern int __select (int __nfds, __fd_set *__restrict __readfds,
-		     __fd_set *__restrict __writefds,
-		     __fd_set *__restrict __exceptfds,
+extern int __select (int __nfds, fd_set *__restrict __readfds,
+		     fd_set *__restrict __writefds,
+		     fd_set *__restrict __exceptfds,
 		     struct timeval *__restrict __timeout);
 #endif
diff --git a/misc/sys/select.h b/misc/sys/select.h
index c182cb93c5..331636106f 100644
--- a/misc/sys/select.h
+++ b/misc/sys/select.h
@@ -1,5 +1,5 @@
 /* `fd_set' type and related macros, and `select'/`pselect' declarations.
-   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1996,1997,1998,1999,2000,2001 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,58 +33,78 @@
 /* Get __sigset_t.  */
 #include <bits/sigset.h>
 
+#ifndef __sigset_t_defined
+# define __sigset_t_defined
+typedef __sigset_t sigset_t;
+#endif
+
 /* Get definition of timer specification structures.  */
 #define __need_timespec
 #include <time.h>
-
-__BEGIN_DECLS
-
-/* This declaration puts `struct timeval' in global scope even if
-   <sys/time.h> has not been included to define it.  That way the
-   `select' prototype below will not conflict with a later definition
-   of `struct timeval'.  */
-struct timeval;
-
-typedef __fd_mask fd_mask;
-
-/* Representation of a set of file descriptors.  */
-typedef __fd_set fd_set;
+#define __need_timeval
+#include <sys/time.h>
+
+
+/* The fd_set member is required to be an array of longs.  */
+typedef long int __fd_mask;
+
+/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
+#define __NFDBITS	(8 * sizeof (__fd_mask))
+#define	__FDELT(d)	((d) / __NFDBITS)
+#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
+
+/* fd_set for select and pselect.  */
+typedef struct
+  {
+    /* XPG4.2 requires this member name.  Otherwise avoid the name
+       from the global namespace.  */
+#ifdef __USE_XOPEN
+    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->fds_bits)
+#else
+    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
+# define __FDS_BITS(set) ((set)->__fds_bits)
+#endif
+  } fd_set;
 
 /* Maximum number of file descriptors in `fd_set'.  */
 #define	FD_SETSIZE		__FD_SETSIZE
 
 #ifdef __USE_MISC
+/* Sometimes the fd_set member is assumed to have this type.  */
+typedef __fd_mask fd_mask;
+
 /* Number of bits per word of `fd_set' (some code assumes this is 32).  */
 # define NFDBITS		__NFDBITS
 #endif
 
 
 /* Access macros for `fd_set'.  */
-#define	FD_SET(fd, fdsetp)	__FD_SET ((fd), (fdsetp))
-#define	FD_CLR(fd, fdsetp)	__FD_CLR ((fd), (fdsetp))
-#define	FD_ISSET(fd, fdsetp)	__FD_ISSET ((fd), (fdsetp))
+#define	FD_SET(fd, fdsetp)	__FD_SET (fd, fdsetp)
+#define	FD_CLR(fd, fdsetp)	__FD_CLR (fd, fdsetp)
+#define	FD_ISSET(fd, fdsetp)	__FD_ISSET (fd, fdsetp)
 #define	FD_ZERO(fdsetp)		__FD_ZERO (fdsetp)
 
 
+__BEGIN_DECLS
+
 /* Check the first NFDS descriptors each in READFDS (if not NULL) for read
    readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
    (if not NULL) for exceptional conditions.  If TIMEOUT is not NULL, time out
    after waiting the interval specified therein.  Returns the number of ready
    descriptors, or -1 for errors.  */
-extern int select (int __nfds, __fd_set *__restrict __readfds,
-		   __fd_set *__restrict __writefds,
-		   __fd_set *__restrict __exceptfds,
+extern int select (int __nfds, fd_set *__restrict __readfds,
+		   fd_set *__restrict __writefds,
+		   fd_set *__restrict __exceptfds,
 		   struct timeval *__restrict __timeout) __THROW;
 
-#ifdef __USE_GNU
-/* XXX Once/if POSIX.1g gets official this prototype will be available
-   when defining __USE_POSIX.  */
+#ifdef __USE_XOPEN2K
 /* Same as above only that the TIMEOUT value is given with higher
    resolution and a sigmask which is been set temporarily.  This version
    should be used.  */
-extern int pselect (int __nfds, __fd_set *__restrict __readfds,
-		    __fd_set *__restrict __writefds,
-		    __fd_set *__restrict __exceptfds,
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+		    fd_set *__restrict __writefds,
+		    fd_set *__restrict __exceptfds,
 		    const struct timespec *__restrict __timeout,
 		    const __sigset_t *__restrict __sigmask) __THROW;
 #endif
diff --git a/signal/signal.h b/signal/signal.h
index 090371fb94..347bcb9f34 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1999, 2000, 2001 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
@@ -34,20 +34,20 @@ __BEGIN_DECLS
 
 /* An integral type that can be modified atomically, without the
    possibility of a signal arriving in the middle of the operation.  */
-#ifndef __sig_atomic_t_defined
-# if defined __need_sig_atomic_t || defined _SIGNAL_H
-#  undef __need_sig_atomic_t
+#if defined __need_sig_atomic_t || defined _SIGNAL_H
+# ifndef __sig_atomic_t_defined
 #  define __sig_atomic_t_defined
 typedef __sig_atomic_t sig_atomic_t;
 # endif
+# undef __need_sig_atomic_t
 #endif
 
-#ifndef __sigset_t_defined
-# if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX)
-#  undef __need_sigset_t
+#if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX)
+# ifndef __sigset_t_defined
 #  define __sigset_t_defined
 typedef __sigset_t sigset_t;
 # endif
+# undef __need_sigset_t
 #endif
 
 #ifdef _SIGNAL_H
diff --git a/sysdeps/generic/bits/select.h b/sysdeps/generic/bits/select.h
index 4513135af9..dfe623eca7 100644
--- a/sysdeps/generic/bits/select.h
+++ b/sysdeps/generic/bits/select.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2001 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,8 +26,8 @@
 #define __FD_ZERO(s) \
   do {									      \
     unsigned int __i;							      \
-    __fd_set *__arr = (s);						      \
-    for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i)	      \
+    fd_set *__arr = (s);						      \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)	      \
       __FDS_BITS (__arr)[__i] = 0;					      \
   } while (0)
 #define __FD_SET(d, s)     (__FDS_BITS (s)[__FDELT(d)] |= __FDMASK(d))
diff --git a/sysdeps/generic/bits/types.h b/sysdeps/generic/bits/types.h
index fd2ec223ea..13d7120f2f 100644
--- a/sysdeps/generic/bits/types.h
+++ b/sysdeps/generic/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,1992,94-1999,2000,2001 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
@@ -93,30 +93,9 @@ typedef int __clockid_t;
 typedef int __timer_t;
 
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE	256
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define	__NFDBITS	(sizeof (unsigned long int) * 8)
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
 
 /* XXX Used in `struct shmid_ds'.  */
 typedef unsigned short int __ipc_pid_t;
diff --git a/sysdeps/i386/bits/select.h b/sysdeps/i386/bits/select.h
index 6acfc5b9ae..e1687684ce 100644
--- a/sysdeps/i386/bits/select.h
+++ b/sysdeps/i386/bits/select.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999, 2001 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
@@ -28,7 +28,7 @@
     int __d0, __d1;							      \
     __asm__ __volatile__ ("cld; rep; stosl"				      \
 			  : "=c" (__d0), "=D" (__d1)			      \
-			  : "a" (0), "0" (sizeof (__fd_set)		      \
+			  : "a" (0), "0" (sizeof (fd_set)		      \
 					  / sizeof (__fd_mask)),	      \
 			    "1" (&__FDS_BITS (fdsp)[0])			      \
 			  : "memory");					      \
@@ -61,8 +61,8 @@
 # define __FD_ZERO(set)  \
   do {									      \
     unsigned int __i;							      \
-    __fd_set *__arr = (set);						      \
-    for (__i = 0; __i < sizeof (__fd_set) / sizeof (__fd_mask); ++__i)	      \
+    fd_set *__arr = (set);						      \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)	      \
       __FDS_BITS (__arr)[__i] = 0;					      \
   } while (0)
 # define __FD_SET(d, set)    (__FDS_BITS (set)[__FDELT (d)] |= __FDMASK (d))
diff --git a/sysdeps/unix/sysv/aix/bits/types.h b/sysdeps/unix/sysv/aix/bits/types.h
index a89393d704..cd57291051 100644
--- a/sysdeps/unix/sysv/aix/bits/types.h
+++ b/sysdeps/unix/sysv/aix/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1994-1999,2000,2001 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
@@ -93,31 +93,9 @@ typedef int __clockid_t;
 /* Timer ID returned by `timer_create'.  */
 typedef int __timer_t;
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the global namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
-
 
 typedef long int __key_t;
 
diff --git a/sysdeps/unix/sysv/hpux/bits/types.h b/sysdeps/unix/sysv/hpux/bits/types.h
index e95892eda3..88ae1a9e9a 100644
--- a/sysdeps/unix/sysv/hpux/bits/types.h
+++ b/sysdeps/unix/sysv/hpux/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1994-1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,1992,1994-1998,2000,2001 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,31 +85,9 @@ typedef long int __swblk_t;		/* Type of a swap block maybe?  */
 
 typedef __u_long __clock_t;
 
-/* One element in the file descriptor mask array.  */
-typedef long int __fd_mask;
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	2048
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the global namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
-
 
 typedef long int __key_t;
 
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/types.h b/sysdeps/unix/sysv/linux/alpha/bits/types.h
index 13c389846f..b357994090 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/types.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1994-1999,2000,2001 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
@@ -92,35 +92,9 @@ typedef int __timer_t;
 /* Used in `struct shmid_ds'.  */
 typedef int __ipc_pid_t;
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
-/* Due to incaution, we may have gotten these from a kernel header file.  */
-#undef __FD_SETSIZE
-#undef __NFDBITS
-#undef __FDMASK
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
 
 /* Used in XTI.  */
 typedef long int __t_scalar_t;
diff --git a/sysdeps/unix/sysv/linux/bits/types.h b/sysdeps/unix/sysv/linux/bits/types.h
index d96ee32cf0..497c055492 100644
--- a/sysdeps/unix/sysv/linux/bits/types.h
+++ b/sysdeps/unix/sysv/linux/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1994-1999,2000,2001 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
@@ -94,31 +94,9 @@ typedef int __clockid_t;
 typedef int __timer_t;
 
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the global namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
-
 
 typedef int __key_t;
 
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/types.h b/sysdeps/unix/sysv/linux/ia64/bits/types.h
index 9492c2133c..5821d7a0e8 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/types.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2001 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
@@ -94,35 +94,9 @@ typedef int __ipc_pid_t;
 /* type to represent block size. */
 typedef long int __blksize_t;
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
-/* Due to incaution, we may have gotten these from a kernel header file.  */
-#undef __FD_SETSIZE
-#undef __NFDBITS
-#undef __FDMASK
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
 
 /* Used in XTI.  */
 typedef int __t_scalar_t;
diff --git a/sysdeps/unix/sysv/linux/mips/bits/types.h b/sysdeps/unix/sysv/linux/mips/bits/types.h
index 927d6098dc..c3b93e3ac7 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/types.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1994-1999,2000,2001 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
@@ -93,31 +93,9 @@ typedef int __clockid_t;
 /* Timer ID returned by `timer_create'.  */
 typedef int __timer_t;
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
-
 
 typedef int __key_t;
 
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types.h b/sysdeps/unix/sysv/linux/sparc/bits/types.h
index a7de62eb15..8f435ef506 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/types.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1994-1999,2000,2001 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
@@ -110,36 +110,9 @@ typedef int __clockid_t;
 /* Timer ID returned by `timer_create'.  */
 typedef int __timer_t;
 
-/* One element in the file descriptor mask array.  */
-typedef unsigned long int __fd_mask;
-
-/* Due to incaution, we may have gotten these from a kernel header file.  */
-#undef __FD_SETSIZE
-#undef __NFDBITS
-#undef __FDMASK
-
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
-
-/* fd_set for select and pselect.  */
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
-
 
 typedef int __key_t;
 
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/bits/types.h b/sysdeps/unix/sysv/sysv4/solaris2/bits/types.h
index 65ad002f79..7765fa45b2 100644
--- a/sysdeps/unix/sysv/sysv4/solaris2/bits/types.h
+++ b/sysdeps/unix/sysv/sysv4/solaris2/bits/types.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1994-1999,2000,2001 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
@@ -89,26 +89,6 @@ typedef int __key_t;		     /* Type of an IPC key */
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE	1024
 
-/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define	__NFDBITS	(sizeof (unsigned long int) * 8)
-#define	__FDELT(d)	((d) / __NFDBITS)
-#define	__FDMASK(d)	((unsigned long int) 1 << ((d) % __NFDBITS))
-
-typedef struct
-  {
-    /* XPG4.2 requires this member name.  Otherwise avoid the name
-       from the user namespace.  */
-#ifdef __USE_XOPEN
-    unsigned long int fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS];
-# define __FDS_BITS(set) ((set)->fds_bits)
-#else
-    unsigned long int __fds_bits[(__FD_SETSIZE + (__NFDBITS - 1)) / __NFDBITS];
-# define __FDS_BITS(set) ((set)->__fds_bits)
-#endif
-  } __fd_set;
-
-typedef unsigned long int __fd_mask;
-
 
 /* Type to represent block size.  */
 typedef long int __blksize_t;
diff --git a/time/sys/time.h b/time/sys/time.h
index 12389fb815..3a0a952da4 100644
--- a/time/sys/time.h
+++ b/time/sys/time.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,93,94,96,97,98,99,2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1994,96,97,98,99,2000,2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -21,12 +21,12 @@
 
 #include <features.h>
 
-#include <time.h>
-#include <sys/select.h>
-
 #define __need_timeval
 #include <bits/time.h>
 
+#include <time.h>
+#include <sys/select.h>
+
 #ifndef __suseconds_t_defined
 typedef __suseconds_t suseconds_t;
 # define __suseconds_t_defined