* 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>.

	by removing SIG_IGN handler for SIGCHLD if necessary.
This commit is contained in:
Ulrich Drepper 1998-11-18 14:46:49 +00:00
parent 090ca0002f
commit dfd2464b33
8 changed files with 60 additions and 15 deletions

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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
/*

View File

@ -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)

View File

@ -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>. */

View File

@ -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;
}

View File

@ -1236,7 +1236,7 @@ my_strftime (s, maxsize, format, tp ut_argument)
}
}
if (p && i < maxsize)
if (p && maxsize != 0)
*p = '\0';
return i;
}