diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 35b8b211d..e8d7ee7bb 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,10 @@ +2015-12-07 Corinna Vinschen + + * libc/include/sys/types.h: Move definitions of NBBY and howmany to + sys/param.h. Move definitions of select(2) macros to sys/select.h. + * libc/include/sys/param.h: See above. + * libc/include/sys/select.h: Move Cygwin's sys/select.h here. + 2015-11-26 Corinna Vinschen * libc/stdlib/strtodg.c: Add ifdef to check _HAVE_LONG_DOUBLE and diff --git a/newlib/libc/include/sys/param.h b/newlib/libc/include/sys/param.h index ef203d3ec..9a6f115a6 100644 --- a/newlib/libc/include/sys/param.h +++ b/newlib/libc/include/sys/param.h @@ -10,6 +10,9 @@ #include #include +#ifndef NBBY +# define NBBY 8 /* number of bits in a byte */ +#endif #ifndef HZ # define HZ (60) #endif @@ -25,4 +28,8 @@ #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) +#ifndef howmany +#define howmany(x, y) (((x)+((y)-1))/(y)) +#endif + #endif diff --git a/newlib/libc/include/sys/select.h b/newlib/libc/include/sys/select.h new file mode 100644 index 000000000..ffe890049 --- /dev/null +++ b/newlib/libc/include/sys/select.h @@ -0,0 +1,87 @@ +/* select.h + Copyright 1998, 1999, 2000, 2001, 2005, 2009 Red Hat, Inc. + + Written by Geoffrey Noer + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#ifndef _SYS_SELECT_H +#define _SYS_SELECT_H + +/* We don't define fd_set and friends if we are compiling POSIX + source, or if we have included (or may include as indicated + by __USE_W32_SOCKETS) the W32api winsock[2].h header which + defines Windows versions of them. Note that a program which + includes the W32api winsock[2].h header must know what it is doing; + it must not call the Cygwin select function. +*/ +# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) + +#include + +/* Get fd_set, and macros like FD_SET */ +#include + +/* Get definition of timeval. */ +#include +#include + +/* Get definition of sigset_t. */ +#include + +# define _SYS_TYPES_FD_SET +/* + * Select uses bit masks of file descriptors in longs. + * These macros manipulate such bit fields (the filesystem macros use chars). + * FD_SETSIZE may be defined by the user, but the default here + * should be >= NOFILE (param.h). + */ +# ifndef FD_SETSIZE +# define FD_SETSIZE 64 +# endif + +typedef unsigned long fd_mask; +# define NFDBITS (sizeof (fd_mask) * 8) /* bits per mask */ +# ifndef _howmany +# define _howmany(x,y) (((x)+((y)-1))/(y)) +# endif + +/* We use a macro for fd_set so that including Sockets.h afterwards + can work. */ +typedef struct _types_fd_set { + fd_mask fds_bits[_howmany(FD_SETSIZE, NFDBITS)]; +} _types_fd_set; + +#define fd_set _types_fd_set + +# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) +# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) +# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) +# define FD_ZERO(p) (__extension__ (void)({ \ + size_t __i; \ + char *__tmp = (char *)p; \ + for (__i = 0; __i < sizeof (*(p)); ++__i) \ + *__tmp++ = 0; \ +})) + +#if !defined (__INSIDE_CYGWIN_NET__) + +__BEGIN_DECLS + +int select __P ((int __n, fd_set *__readfds, fd_set *__writefds, + fd_set *__exceptfds, struct timeval *__timeout)); +int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds, + fd_set *__exceptfds, const struct timespec *__timeout, + const sigset_t *__set)); + +__END_DECLS + +#endif + +#endif /* !_POSIX_SOURCE, !__INSIDE_CYGWIN_NET__ */ + +#endif /* sys/select.h */ diff --git a/newlib/libc/include/sys/types.h b/newlib/libc/include/sys/types.h index d8d6fdcb2..5dd6c75fe 100644 --- a/newlib/libc/include/sys/types.h +++ b/newlib/libc/include/sys/types.h @@ -208,52 +208,6 @@ typedef unsigned int mode_t _ST_INT32; typedef unsigned short nlink_t; -/* We don't define fd_set and friends if we are compiling POSIX - source, or if we have included (or may include as indicated - by __USE_W32_SOCKETS) the W32api winsock[2].h header which - defines Windows versions of them. Note that a program which - includes the W32api winsock[2].h header must know what it is doing; - it must not call the cygwin32 select function. -*/ -# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) -# define _SYS_TYPES_FD_SET -# define NBBY 8 /* number of bits in a byte */ -/* - * Select uses bit masks of file descriptors in longs. - * These macros manipulate such bit fields (the filesystem macros use chars). - * FD_SETSIZE may be defined by the user, but the default here - * should be >= NOFILE (param.h). - */ -# ifndef FD_SETSIZE -# define FD_SETSIZE 64 -# endif - -typedef long fd_mask; -# define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ -# ifndef howmany -# define howmany(x,y) (((x)+((y)-1))/(y)) -# endif - -/* We use a macro for fd_set so that including Sockets.h afterwards - can work. */ -typedef struct _types_fd_set { - fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; -} _types_fd_set; - -#define fd_set _types_fd_set - -# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) -# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) -# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) -# define FD_ZERO(p) (__extension__ (void)({ \ - size_t __i; \ - char *__tmp = (char *)p; \ - for (__i = 0; __i < sizeof (*(p)); ++__i) \ - *__tmp++ = 0; \ -})) - -# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) */ - #undef __MS_types__ #undef _ST_INT32 diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 7213075f0..f378f1672 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +2015-12-07 Corinna Vinschen + + * include/sys/select.h: Move select(2) macros from newlib's sys/types.h + here. Rename howmany to _howmany to unclutter namespace. Move file to + newlib. + * libc/rexex.cc: Add declaration for cygwin_gethostname. + * poll.cc: Include sys/param.h and locale select.h. + * select.h (cygwin_select): Declare. + * uname.cc: Declare cygwin_gethostname. + * winsup.h: Drop declarations of cygwin_select and cygwin_gethostname. + 2015-12-07 Corinna Vinschen * dcrt0.cc: Semi-revert commit 12743c2d5d2721f3a80b4d7671a349be03c1f520. diff --git a/winsup/cygwin/include/sys/select.h b/winsup/cygwin/include/sys/select.h deleted file mode 100644 index 9cc6c1eca..000000000 --- a/winsup/cygwin/include/sys/select.h +++ /dev/null @@ -1,41 +0,0 @@ -/* select.h - Copyright 1998, 1999, 2000, 2001, 2005, 2009 Red Hat, Inc. - - Written by Geoffrey Noer - -This file is part of Cygwin. - -This software is a copyrighted work licensed under the terms of the -Cygwin license. Please consult the file "CYGWIN_LICENSE" for -details. */ - -#ifndef _SYS_SELECT_H -#define _SYS_SELECT_H - -#if !defined (_POSIX_SOURCE) && !defined (__INSIDE_CYGWIN_NET__) && !defined (__USE_W32_SOCKETS) - -#include - -/* Get fd_set, and macros like FD_SET */ -#include - -/* Get definition of timeval. */ -#include -#include - -/* Get definition of sigset_t. */ -#include - -__BEGIN_DECLS - -int select __P ((int __n, fd_set *__readfds, fd_set *__writefds, - fd_set *__exceptfds, struct timeval *__timeout)); -int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds, - fd_set *__exceptfds, const struct timespec *__timeout, - const sigset_t *__set)); - -__END_DECLS - -#endif /* !_POSIX_SOURCE, !__INSIDE_CYGWIN_NET__ */ - -#endif /* sys/select.h */ diff --git a/winsup/cygwin/libc/rexec.cc b/winsup/cygwin/libc/rexec.cc index f9be2231a..a796e9762 100644 --- a/winsup/cygwin/libc/rexec.cc +++ b/winsup/cygwin/libc/rexec.cc @@ -63,6 +63,7 @@ static char sccsid[] = "@(#)rexec.c 8.1 (Berkeley) 6/4/93"; extern "C" { int cygwin_accept (int, struct sockaddr *, socklen_t *); int cygwin_connect (int, const struct sockaddr *, socklen_t); + int cygwin_gethostname (char *__name, size_t __len); int cygwin_getsockname (int, struct sockaddr *, socklen_t *); void cygwin_herror (const char *); int cygwin_listen (int, int); diff --git a/winsup/cygwin/poll.cc b/winsup/cygwin/poll.cc index 2b6f8a90a..52745b134 100644 --- a/winsup/cygwin/poll.cc +++ b/winsup/cygwin/poll.cc @@ -1,7 +1,7 @@ /* poll.cc. Implements poll(2) via usage of select(2) call. Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, - 2012, 2014 Red Hat, Inc. + 2012, 2014, 2015 Red Hat, Inc. This file is part of Cygwin. @@ -12,6 +12,7 @@ #define FD_SETSIZE 16384 // lots of fds #include "winsup.h" #include +#include #include #define USE_SYS_TYPES_FD_SET #include "cygerrno.h" @@ -21,6 +22,7 @@ #include "cygheap.h" #include "pinfo.h" #include "sigproc.h" +#include "select.h" extern "C" int poll (struct pollfd *fds, nfds_t nfds, int timeout) diff --git a/winsup/cygwin/select.h b/winsup/cygwin/select.h index 5ce092486..00358203f 100644 --- a/winsup/cygwin/select.h +++ b/winsup/cygwin/select.h @@ -107,4 +107,8 @@ public: device_specific_serial (NULL), device_specific_mailslot (NULL) {} }; + +extern "C" int cygwin_select (int , fd_set *, fd_set *, fd_set *, + struct timeval *to); + #endif /* _SELECT_H_ */ diff --git a/winsup/cygwin/uname.cc b/winsup/cygwin/uname.cc index 1aa7f7371..cd19cd454 100644 --- a/winsup/cygwin/uname.cc +++ b/winsup/cygwin/uname.cc @@ -16,6 +16,8 @@ details. */ #include "cygwin_version.h" #include "cygtls.h" +extern "C" int cygwin_gethostname (char *__name, size_t __len); + /* uname: POSIX 4.4.1.1 */ extern "C" int uname (struct utsname *name) diff --git a/winsup/cygwin/winsup.h b/winsup/cygwin/winsup.h index b2c860282..d7f7350f5 100644 --- a/winsup/cygwin/winsup.h +++ b/winsup/cygwin/winsup.h @@ -260,14 +260,6 @@ extern inline bool flush_file_buffers (HANDLE h) /* Make sure that regular ExitThread is never called */ #define ExitThread exit_thread -/**************************** Exports ******************************/ - -extern "C" { -int cygwin_select (int , fd_set *, fd_set *, fd_set *, - struct timeval *to); -int cygwin_gethostname (char *__name, size_t __len); -}; - /*************************** Unsorted ******************************/ #define WM_ASYNCIO 0x8000 // WM_APP