+2017-11-24 Keith Marshall <keith@users.osdn.me>
+
+ Make <winsock.h> and <winsock2.h> duplicate code congruent.
+
+ * include/winsock.h (SOMAXCONN): Move definition into...
+ [!__INSIDE_MSYS__]: ...this guarded scope.
+
+ * include/winsock2.h: Rearrange as necessary.
+ [_BEGIN_C_DECLS, _END_C_DECLS]: Keep them balanced.
+ (_USE_SYS_TYPES_FD_SET): Define and use, as in <winsock.h>
+ [!_WINSOCK_ANOMALOUS_TYPEDEFS] (FD_SET): Declare function, not type.
+ [!_WINSOCK_ANOMALOUS_TYPEDEFS] (PFD_SET, LPFD_SET): Suppress typedefs.
+ (FD_SET, FD_ISSET, FD_CLR, FD_ZERO): Reimplement, as in <winsock.h>
+ (FD_READ_BIT, FD_WRITE_BIT, FD_OOB_BIT, FD_ACCEPT_BIT)
+ (FD_CONNECT_BIT, FD_CLOSE_BIT, FD_QOS_BIT, FD_GROUP_QOS_BIT)
+ (FD_ROUTING_INTERFACE_CHANGE_BIT, FD_ADDRESS_LIST_CHANGE_BIT)
+ (FD_MAX_EVENTS): Enumerate them, as in <winsock.h>
+ [!(defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)]: Recast...
+ [!defined __INSIDE_MSYS__]: ...as this, throughout.
+ (gethostname): Update function prototype, adding...
+ (WINSOCK_API_LINKAGE): ...this DLL import control attribute.
+
+ * include/ws2spi.h: Tidy layout; assert copyright.
+ [_BEGIN_C_DECLS, _END_C_DECLS]: Use them, as appropriate.
+ (LPFD_SET): Delete all type references; use...
+ (fd_set *): ...this instead.
+
+2017-11-14 Keith Marshall <keith@users.osdn.me>
+
+ Establish default selection for WinSock API declaration.
+
+ * include/windows.h include/nspapi.h: Include...
+ * include/_winsock.h: ...this new system private header; it selects...
+ [_WIN32_WINNT >= _WIN32_WINNT_NT4]: ...WinSock v2 API declarations, as
+ provided by conditional inclusion of <winsock2.h>, otherwise...
+ [_WIN32_WINNT < _WIN32_WINNT_NT4]: ...WinSock v1.1 API declarations,
+ as provided by inclusion of <winsock.h>
+
+ * tests/headers.at <_winsock.h>: Add reference.
+
+2017-11-14 Keith Marshall <keith@users.osdn.me>
+
+ Update gethostname() declaration; drop Cygwin specificity.
+
+ * include/winsock.h (gethostname): Declare unconditionally; add...
+ (WINSOCK_API_LINKAGE): ...this DLL import control attribute.
+ [!(defined __INSIDE_CYGWIN__ || defined __INSIDE_MSYS__)]: Recast...
+ [!defined __INSIDE_MSYS__]: ...as this, throughout.
+
+2017-11-09 Keith Marshall <keith@users.osdn.me>
+
+ Normalize fd_set event macros for <winsock2.h> compatibility.
+
+ * include/winsock.h (FD_READ, FD_WRITE, FD_OOB, FD_ACCEPT, FD_CONNECT)
+ (FD_CLOSE): Redefine them, deriving respective values as shifts by...
+ (FD_READ_BIT, FD_WRITE_BIT, FD_OOB_BIT, FD_ACCEPT_BIT, FD_CONNECT_BIT)
+ (FD_CLOSE_BIT): ...this new enumerated count sequence, applying each
+ count to a bit flag with value of 1, in each case respectively.
+ [_WINSOCK2_H]: Extend shift count enumeration, to include...
+ (FD_QOS_BIT, FD_GROUP_QOS_BIT, FD_ROUTING_INTERFACE_CHANGE_BIT)
+ (FD_ADDRESS_LIST_CHANGE_BIT): ...these additional counts; hence...
+ [_WINSOCK2_H] (FD_QOS, FD_GROUP_QOS, FD_ROUTING_INTERFACE_CHANGE)
+ [_WINSOCK2_H] (FD_ADDRESS_LIST_CHANGE): ...define each of these.
+ (FD_MAX_EVENTS): Define unconditionally; it represents a shift count
+ of 1 greater than the offset of the last defined flag; hence...
+ (FD_ALL_EVENTS): ...derive this mask for all event flags.
+
+2017-11-09 Keith Marshall <keith@users.osdn.me>
+
+ Filter potential WinSock v2 conflicts out of <winsock.h>
+
+ * include/winsock.h [_WINSOCK2_H] <mswsock.h>: Do not include it.
+ [_WINSOCK2_H] (IP_MULTICAST_IF, IP_MULTICAST_TTL, IP_MULTICAST_LOOP)
+ (IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP, IP_DEFAULT_MULTICAST_TTL)
+ (IP_DEFAULT_MULTICAST_LOOP, IP_MAX_MEMBERSHIPS, struct ip_mreq): Do
+ not define any of these; they are not compatible with WinSock v2.
+ [_WINSOCK2_H] (SOMAXCONN): Do not define it; it will be defined
+ appropiately in <winsock2.h>
+
+2017-11-09 Keith Marshall <keith@users.osdn.me>
+
+ Filter out <winsock.h> typedef anomalies.
+
+ * include/winsock.h (FD_SET, PFD_SET, LPFD_SET): If user defines...
+ [_WINSOCK_ANOMALOUS_TYPEDEFS]: ...this new feature test macro, expose
+ them as type definitions, but warn of potential conflict with...
+ [!_WINSOCK_ANOMALOUS_TYPEDEFS] (FD_SET): ...this POSIX.1 mandated
+ function; declare its prototype.
+
+2017-11-08 Keith Marshall <keith@users.osdn.me>
+
+ Overhaul WinSock fd_set content management macros.
+
+ * include/winsock.h (FD_SET, FD_ISSET, FD_CLR, FD_ZERO): Replace the
+ original implementations of each of these macros, redirecting to...
+ (__FD_SET, __FD_ISSET, __FD_CLR, __FD_ZERO): ...these new, equivalent
+ inline functions, respectively; these are more robust, and correct a
+ defect in the original FD_SET macro implementation, whereby duplicate
+ descriptors could be added to an fd_set array, but would not then be
+ removed by the corresponding FD_CLR macro.
+
+ * tests/winsock.at (MINGW_AT_CHECK_WINSOCK): Ensure that all test
+ programs are linked with -lwsock32 or -lws2_32, as appropriate; the
+ __FD_SET and __FD_ISSET functions are dependent on the __WSAFDIsSet()
+ function, which is implemented in each of these libraries.
+
+2017-11-07 Keith Marshall <keith@users.osdn.me>
+
+ Identify features which have been deprecated in WinSock v2.
+
+ * include/winsock.h (__WINSOCK2_DEPRECATED): Define as nothing.
+ * include/winsock2.h (__WINSOCK2_DEPRECATED): Define as equivalent...
+ (__MINGW_ATTRIB_DEPRECATED): ...to this.
+
+ * include/winsock.h include/winsock2.h: Qualify...
+ (WSAIsBlocking, WSAUnhookBlockingHook, WSASetBlockingHook)
+ (WSACancelBlockingCall): ...each of these function prototypes, with...
+ (__WINSOCK2_DEPRECATED): ...this attribute.
+
+2017-11-07 Keith Marshall <keith@users.osdn.me>
+
+ Adopt system naming convention for USE_SYS_TYPES_FD_SET macro.
+
+ * include/winsock.h (USE_SYS_TYPES_FD_SET): Deprecate it; use...
+ (_USE_SYS_TYPES_FD_SET): ...this alternative; it is named to conform
+ with preferred convention for system feature test macros.
+
+2017-11-06 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Use WINSOCK_API_LINKAGE consistently in WinSock headers.
+
+ * include/winsock.h (WINSOCK_API_LINKAGE): Define, and prefix to...
+ (accept, bind, closesocket, connect, ioctlsocket, inet_addr, inet_ntoa)
+ (getpeername, getsockname, getsockopt, listen, recv, recvfrom, send)
+ (sendto, setsockopt, shutdown, socket, gethostbyaddr, gethostbyname)
+ (getservbyport, getservbyname, getprotobynumber, getprotobyname)
+ (WSAStartup, WSACleanup, WSASetLastError, WSAGetLastError)
+ (WSAIsBlocking, WSAUnhookBlockingHook, WSASetBlockingHook)
+ (WSACancelBlockingCall, WSAAsyncGetServByName, WSAAsyncGetServByPort)
+ (WSAAsyncGetProtoByName, WSAAsyncGetProtoByNumber, WSAAsyncSelect)
+ (WSAAsyncGetHostByName, WSAAsyncGetHostByAddr, WSACancelAsyncRequest)
+ (htonl, ntohl, htons, ntohs, select): ...these function prototypes.
+
+ * include/winsock2.h (WINSOCK_API_LINKAGE): Remove it from...
+ (LPFN_WSASTARTUP): ...this typedef; it is inappropriate.
+
+2017-10-30 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Refactor <wtypes.h> vs. <nspapi.h> and WinSock headers.
+
+ * include/wtypes.h: Tidy layout; assert copyright.
+ [_BEGIN_C_DECLS, _END_C_DECLS]: Use them, as appropriate.
+ [__NSPAPI_H_SOURCED__]: Restrict exposure of declared content to...
+ [!__BLOB_DATA_TYPE_DEFINED] (BLOB, PBLOB, LPBLOB): ...these; define...
+ (__BLOB_DATA_TYPE_DEFINED__): ...this internal guard; it renames...
+ (__BLOB_T_DEFINED): ...this; do not define...
+ (_WTYPES_H): ...this external guard.
+
+ * include/nspapi.h: Tidy layout; assert copyright.
+ [_BEGIN_C_DECLS, _END_C_DECLS]: Use them, as appropriate.
+ (__CSADDR_T_DEFINED): Do not define; it is no longer required.
+ [__WINSOCK2_H_SOURCED__]: Restrict exposure of declared content to...
+ (struct _CSADDR_INFO): ...this, as an incomplete type, along with...
+ (CSADDR_INFO, PCSADDR_INFO, LPCSADDR_INFO): ...these typedefs; also...
+ (SOCKET_ADDRESS, PSOCKET_ADDRESS, LPSOCKET_ADDRESS): ...define fully.
+ [__WINSOCK2_H_SOURCED__] (_NSPAPI_H): Do not define external guard.
+ [!__WINSOCK2_H_SOURCED__] (struct _CSADDR_INFO): Define fully.
+ (__BLOB_T_DEFINED, BLOB, PBLOB, LPBLOB): Do not define; instead...
+ (__NSPAPI_H_SOURCED__): ...define this, temporarily; include wtypes.h
+ [!__WINSOCK2_H_SOURCED__ && _WIN32_WINNT >= WIN2K]: Include winsock2.h
+ [!__WINSOCK2_H_SOURCED__ && _WIN32_WINNT < WIN2K]: Include winsock.h
+ [UNICODE vs. !UNICODE]: Discriminate generic symbol names, using...
+ (__AW_SUFFIXED__): ...this, to facilitate definition of each of...
+ (SetService, GetAddressByName, _SERVICE_INFO): ...these, and...
+ (__AW_ALIAS__): ...this, for definition of each of...
+ (SERVICE_INFO, LPSERVICE_INFO): ...these.
+
+ * include/winsock2.h (__WINSOCK2_H_SOURCED__): Define it temporarily.
+ (__CSADDR_T_DEFINED, struct _CSADDR_INFO, CSADDR_INFO, PCSADDR_INFO)
+ (LPCSADDR_INFO, __BLOB_T_DEFINED, BLOB, PBLOB, LPBLOB): Do not define;
+ include nspapi.h selectively, to acquire them.
+
+2017-09-23 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Factor <winerror.h> duplicate content out of winsock headers.
+
+ * include/winsock.h include/winsock2.h [!defined WSABASEERR]: Delete
+ conditional block, and all of its content; selectively include...
+ * include/winerror.h [__WINSOCK_H_SOURCED__]: ...this instead.
+ [__WINSOCK_H_SOURCED__] (_WINERROR_H): Do not define it.
+ (__WINSOCK_V1_ERRORS__, __WINSOCK_V2_ERRORS__): New temporary macros;
+ define them, to segregate WSA error messages applicable to WinSock v2
+ only, from those applicable to both WinSock v1.1 and WinSock v2.
+ (__WSA_ERRNO): New macro; use it to redefine all WSA specific error
+ codes, except WSABASEERR, relative to WSABASEERR itself.
+
+2017-09-15 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Factor <sys/time.h> duplicate content out of winsock headers.
+
+ * include/winsock.h include/winsock2.h [_TIMEVAL_DEFINED]: Delete
+ conditional block, and all its content; include <sys/time.h> instead.
+ (__WINSOCK_H_SOURCED__): New macro; define it temporarily, only while
+ processing this header, such that only selected content from other
+ internally referenced headers is exposed.
+
+2017-09-09 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Source BSD non-standard type definitions from mingwrt header.
+
+ * include/winsock.h include/winsock2.h [_BSDTYPES_DEFINED]: Delete
+ conditional block, and its entire type definition content; include...
+ * include/sys/bsdtypes.h: ...this common file instead; it defines...
+ (u_char, u_int, u_long, u_short): ...these non-standard data types.
+
+2017-09-07 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Correct misuse of __INSIDE_MSYS__ feature test.
+
+ * include/winsock2.h [!__INSIDE_MSYS__]: One of several instances
+ omits "defined" operator; it should be expressed consistently as...
+ [! defined __INSIDE_MSYS__]: ...this; correct it.
+
+2017-09-07 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Prepare for <winsock.h> vs. <winsock2.h> refactoring.
+
+ * include/winsock.h: Tidy layout; assert copyright.
+ (_BEGIN_C_DECLS, _END_C_DECLS): Use them to avoid C++ name mangling.
+
+ * include/winsock2.h: Assert copyright; tidy layout, ensuring that all
+ sections, which are common with <winsock.h>, are laid out congruently.
+ (_BEGIN_C_DECLS, _END_C_DECLS): Use them to avoid C++ name mangling.
+ (SD_RECEIVE, SD_SEND, SD_BOTH): Delete duplicate constant definitions.
+ (SO_DONTLINGER, MSG_MAXIOVLEN): Likewise, delete duplicate definitions.
+ (__AW_ALIAS__, __AW_SUFFIXED__): Use them, to avoid reproduction of...
+ [UNICODE]: ...alternative typedefs, and function name aliases...
+ [!UNICODE]: ...versus this case.
+
+2017-08-28 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Resolve secondary issue arising from MinGW-Bug [#2350]
+
+ * include/winuser.h (GetTitleBarInfo)
+ [_WIN32_WINDOWS >= _WIN32_WINDOWS_98]: Remove exposure restriction;
+ it conflicted with current MSDN documentation, so now falls within...
+ [_WIN32_WINNT >= Win2K || _WIN32_WINDOWS >= Win98]: ...this.
+
2017-08-28 Keith Marshall <keithmarshall@users.sourceforge.net>
Resolve MinGW-Bug [#2350]