diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2001-01-27 19:28:32 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2001-01-27 19:28:32 +0000 |
| commit | 2ff458ebe647b5aba45d3b8f49ea76d2d993d5db (patch) | |
| tree | 384a317dd5538204979905ed9e8856513a946556 | |
| parent | eec409170bdfca76393e39502c0435e25c62153a (diff) | |
| download | glibc-2ff458ebe647b5aba45d3b8f49ea76d2d993d5db.tar.xz glibc-2ff458ebe647b5aba45d3b8f49ea76d2d993d5db.zip | |
Update.
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>.
| -rw-r--r-- | ChangeLog | 30 | ||||
| -rw-r--r-- | bits/select.h | 6 | ||||
| -rw-r--r-- | bits/types.h | 23 | ||||
| -rw-r--r-- | conform/conformtest.pl | 108 | ||||
| -rw-r--r-- | conform/data/sys/mman.h-data | 18 | ||||
| -rw-r--r-- | conform/data/sys/select.h-data | 33 | ||||
| -rw-r--r-- | conform/data/sys/time.h-data | 5 | ||||
| -rw-r--r-- | include/sys/select.h | 10 | ||||
| -rw-r--r-- | misc/sys/select.h | 72 | ||||
| -rw-r--r-- | signal/signal.h | 14 | ||||
| -rw-r--r-- | sysdeps/generic/bits/select.h | 6 | ||||
| -rw-r--r-- | sysdeps/generic/bits/types.h | 23 | ||||
| -rw-r--r-- | sysdeps/i386/bits/select.h | 8 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/aix/bits/types.h | 24 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/hpux/bits/types.h | 24 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/alpha/bits/types.h | 28 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/bits/types.h | 24 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/ia64/bits/types.h | 28 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/mips/bits/types.h | 24 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/types.h | 29 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/sysv4/solaris2/bits/types.h | 22 | ||||
| -rw-r--r-- | time/sys/time.h | 8 |
22 files changed, 249 insertions, 318 deletions
@@ -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 |
