1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
* 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> 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. * io/Makefile (CFLAGS-ftw.c): Removed.
1998-11-18 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> 1998-11-18 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
@ -28,7 +41,7 @@
1998-11-17 Ulrich Drepper <drepper@cygnus.com> 1998-11-17 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sleep.c (__sleep): Make Unix98 compliant * 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>. Patch by H.J. Lu <hjl@lucon.org>.
* stdio-common/printf_fphex.c (__printf_fphex): Correct printing * stdio-common/printf_fphex.c (__printf_fphex): Correct printing

View File

@ -1,6 +1,6 @@
Open jobs for finishing GNU libc: 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 If you have time and talent to take over any of the jobs below please
contact <bug-glibc@gnu.org>. 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 treated as the `Eastern Australia Time' instead of the US `Eastern
Standard Time' if the current TZ variable is set to, say, Standard Time' if the current TZ variable is set to, say,
Australia/Canberra or if the current locale is en_AU. 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 @end deftypevr
@comment errno.h @comment errno.h
@comment POSIX.1: Operation not supported by device @comment POSIX.1: No such device
@deftypevr Macro int ENODEV @deftypevr Macro int ENODEV
@comment errno 19 @c DO NOT REMOVE @comment errno 19 @c DO NOT REMOVE
The wrong type of device was given to a function that expects a 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 The wrong type of device was given to a function that expects a
TRANS particular sort of device. */ TRANS particular sort of device. */
[ERR_REMAP (ENODEV)] = N_("Operation not supported by device"), [ERR_REMAP (ENODEV)] = N_("No such device"),
#endif #endif
#ifdef ENOTDIR #ifdef ENOTDIR
/* /*

View File

@ -62,6 +62,32 @@ __poll (fds, nfds, timeout)
for (f = fds; f < &fds[nfds]; ++f) for (f = fds; f < &fds[nfds]; ++f)
if (f->fd >= 0) 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) if (f->events & POLLIN)
FD_SET (f->fd, rset); FD_SET (f->fd, rset);
if (f->events & POLLOUT) if (f->events & POLLOUT)

View File

@ -194,11 +194,12 @@ struct cmsghdr
+ CMSG_ALIGN (sizeof (struct cmsghdr))) + CMSG_ALIGN (sizeof (struct cmsghdr)))
#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr,
struct cmsghdr *__cmsg));
#ifdef __USE_EXTERN_INLINES
# ifndef _EXTERN_INLINE # ifndef _EXTERN_INLINE
# define _EXTERN_INLINE extern __inline # define _EXTERN_INLINE extern __inline
# endif # endif
extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr,
struct cmsghdr *__cmsg));
_EXTERN_INLINE struct cmsghdr * _EXTERN_INLINE struct cmsghdr *
__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW __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 NULL;
return __cmsg; return __cmsg;
} }
#endif /* Use `extern inline'. */
/* Socket level message types. This must match the definitions in /* Socket level message types. This must match the definitions in
<linux/socket.h>. */ <linux/socket.h>. */

View File

@ -1,5 +1,5 @@
/* Return point to next ancillary data entry in message header. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -23,16 +23,17 @@
struct cmsghdr * struct cmsghdr *
__cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg) __cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg)
{ {
unsigned char *p;
if ((size_t) cmsg->cmsg_len < sizeof (struct cmsghdr)) if ((size_t) cmsg->cmsg_len < sizeof (struct cmsghdr))
/* The kernel header does this so there may be a reason. */ /* The kernel header does this so there may be a reason. */
return NULL; return NULL;
p = (((unsigned char *) cmsg) cmsg = (struct cmsghdr *) ((unsigned char *) cmsg
+ ((cmsg->cmsg_len + sizeof (long int) - 1) & ~sizeof (long int))); + CMSG_ALIGN (cmsg->cmsg_len));
if (p >= (unsigned char *) mhdr->msg_control + mhdr->msg_controllen) 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. */ /* No more entries. */
return NULL; 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'; *p = '\0';
return i; return i;
} }