diff options
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | PROJECTS | 5 | ||||
-rw-r--r-- | manual/errno.texi | 2 | ||||
-rw-r--r-- | sysdeps/gnu/errlist.c | 2 | ||||
-rw-r--r-- | sysdeps/unix/bsd/poll.c | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/socket.h | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/cmsg_nxthdr.c | 15 | ||||
-rw-r--r-- | time/strftime.c | 2 |
8 files changed, 60 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog index 99e5ad02a1..a394fd9001 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 1998-11-18 Ulrich Drepper <drepper@cygnus.com> + * sysdeps/unix/bsd/poll.c (__poll): Add code to extend sets if any + passed file descriptor exceeds the size determined by + getdtablesize. + + * sysdeps/unix/sysv/linux/cmsg_nxthdr.c (__cmsg_nxthdr): Update + from inline version in bits/socket.h. + + * sysdeps/unix/sysv/linux/bits/socket.h: Define __cmsg_nxthdr as + inline function only is __USE_EXTERN_INLINES is defined. + + * time/strftime.c (my_strftime): Make code a bit clearer. + Patch by Paul Eggert <eggert@twinsun.com>. + * io/Makefile (CFLAGS-ftw.c): Removed. 1998-11-18 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> @@ -28,7 +41,7 @@ 1998-11-17 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/sleep.c (__sleep): Make Unix98 compliant - by working removing SIG_IGN handler for SIGCHLD if necessary. + by removing SIG_IGN handler for SIGCHLD if necessary. Patch by H.J. Lu <hjl@lucon.org>. * stdio-common/printf_fphex.c (__printf_fphex): Correct printing diff --git a/PROJECTS b/PROJECTS index d5be6313eb..ed79e577e9 100644 --- a/PROJECTS +++ b/PROJECTS @@ -1,6 +1,6 @@ Open jobs for finishing GNU libc: --------------------------------- -Status: July 1998 +Status: November 1998 If you have time and talent to take over any of the jobs below please contact <bug-glibc@gnu.org>. @@ -159,3 +159,6 @@ contact <bug-glibc@gnu.org>. treated as the `Eastern Australia Time' instead of the US `Eastern Standard Time' if the current TZ variable is set to, say, Australia/Canberra or if the current locale is en_AU. + +[24] Allow add-ons to specify dependencies and generate the content of + `all-subdirs' in Makeconfig dynamically. diff --git a/manual/errno.texi b/manual/errno.texi index e0c5b870f9..cc937f9c03 100644 --- a/manual/errno.texi +++ b/manual/errno.texi @@ -277,7 +277,7 @@ also when you rename a file with @code{rename} (@pxref{Renaming Files}). @end deftypevr @comment errno.h -@comment POSIX.1: Operation not supported by device +@comment POSIX.1: No such device @deftypevr Macro int ENODEV @comment errno 19 @c DO NOT REMOVE The wrong type of device was given to a function that expects a diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c index a0ae14af82..2f81a7d786 100644 --- a/sysdeps/gnu/errlist.c +++ b/sysdeps/gnu/errlist.c @@ -144,7 +144,7 @@ TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). * /* TRANS The wrong type of device was given to a function that expects a TRANS particular sort of device. */ - [ERR_REMAP (ENODEV)] = N_("Operation not supported by device"), + [ERR_REMAP (ENODEV)] = N_("No such device"), #endif #ifdef ENOTDIR /* diff --git a/sysdeps/unix/bsd/poll.c b/sysdeps/unix/bsd/poll.c index 23ae6e21be..7fb4fcc3fa 100644 --- a/sysdeps/unix/bsd/poll.c +++ b/sysdeps/unix/bsd/poll.c @@ -62,6 +62,32 @@ __poll (fds, nfds, timeout) for (f = fds; f < &fds[nfds]; ++f) if (f->fd >= 0) { + if (f->fd >= max_fd_size) + { + /* The user provides a file descriptor number which is higher + than the maximum we got from the `getdtablesize' call. + Maybe this is ok so enlarge the arrays. */ + fd_set *nrset, *nwset, *nxset; + int nbytes; + + max_fd_size = roundup (f->fd, __NFDBITS); + nbytes = howmany (max_fd_size, __NFDBITS); + + nrset = alloca (nbytes); + nwset = alloca (nbytes); + nxset = alloca (nbytes); + + __bzero ((char *) nrset + bytes, nbytes - bytes); + __bzero ((char *) nwset + bytes, nbytes - bytes); + __bzero ((char *) nxset + bytes, nbytes - bytes); + + rset = memcpy (nrset, rset, bytes); + wset = memcpy (nwset, wset, bytes); + xset = memcpy (nxset, xset, bytes); + + bytes = nbytes; + } + if (f->events & POLLIN) FD_SET (f->fd, rset); if (f->events & POLLOUT) diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h index 30ba59fc57..74b4ca2ee1 100644 --- a/sysdeps/unix/sysv/linux/bits/socket.h +++ b/sysdeps/unix/sysv/linux/bits/socket.h @@ -194,11 +194,12 @@ struct cmsghdr + CMSG_ALIGN (sizeof (struct cmsghdr))) #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) -#ifndef _EXTERN_INLINE -# define _EXTERN_INLINE extern __inline -#endif extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr, struct cmsghdr *__cmsg)); +#ifdef __USE_EXTERN_INLINES +# ifndef _EXTERN_INLINE +# define _EXTERN_INLINE extern __inline +# endif _EXTERN_INLINE struct cmsghdr * __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW { @@ -216,6 +217,7 @@ __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW return NULL; return __cmsg; } +#endif /* Use `extern inline'. */ /* Socket level message types. This must match the definitions in <linux/socket.h>. */ diff --git a/sysdeps/unix/sysv/linux/cmsg_nxthdr.c b/sysdeps/unix/sysv/linux/cmsg_nxthdr.c index 2245db7f25..fda37f37aa 100644 --- a/sysdeps/unix/sysv/linux/cmsg_nxthdr.c +++ b/sysdeps/unix/sysv/linux/cmsg_nxthdr.c @@ -1,5 +1,5 @@ /* Return point to next ancillary data entry in message header. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 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 @@ -23,16 +23,17 @@ struct cmsghdr * __cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg) { - unsigned char *p; - if ((size_t) cmsg->cmsg_len < sizeof (struct cmsghdr)) /* The kernel header does this so there may be a reason. */ return NULL; - p = (((unsigned char *) cmsg) - + ((cmsg->cmsg_len + sizeof (long int) - 1) & ~sizeof (long int))); - if (p >= (unsigned char *) mhdr->msg_control + mhdr->msg_controllen) + cmsg = (struct cmsghdr *) ((unsigned char *) cmsg + + CMSG_ALIGN (cmsg->cmsg_len)); + if ((unsigned char *) (cmsg + 1) >= ((unsigned char *) mhdr->msg_control + + mhdr->msg_controllen) + || ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len) + >= ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen))) /* No more entries. */ return NULL; - return (struct cmsghdr *) p; + return cmsg; } diff --git a/time/strftime.c b/time/strftime.c index 3e81d2189b..be7891d14a 100644 --- a/time/strftime.c +++ b/time/strftime.c @@ -1236,7 +1236,7 @@ my_strftime (s, maxsize, format, tp ut_argument) } } - if (p && i < maxsize) + if (p && maxsize != 0) *p = '\0'; return i; } |