Hi,
struct timeval uses long as types of their members. This is an
obvious problem on LP64. THe below patch works around this issue
by using PTIMEVAL in place of struct timeval * in the affected
headers, and by redefinining TIMEVAL, PTIMEVAL, and LPTIMEVAL in
psdk_inc/_ip_types.h to a replacement type using MS long-sized types.
Thanks,
Corinna
* psdk_inc/_ip_types.h (struct __ms_timeval): Define on LP64 systems.
(TIMEVAL): Define based on struct __ms_timeval on LP64, based on
struct timeval otherwise.
(PTIMEVAL): Ditto.
(LPTIMEVAL): Ditto.
* winsock.h: Replace all `struct timeval *' usages with PTIMEVAL.
* winsock2.h: Ditto.
* ws2spi.h: Ditto.
* ws2tcpip.h: Ditto.
Index: psdk_inc/_ip_types.h
===================================================================
--- psdk_inc/_ip_types.h (revision 5287)
+++ psdk_inc/_ip_types.h (working copy)
@@ -103,9 +103,19 @@
typedef struct linger *PLINGER;
typedef struct linger *LPLINGER;
+#ifdef __LP64__
+struct __ms_timeval {
+ __LONG32 tv_sec;
+ __LONG32 tv_usec;
+};
+typedef struct __ms_timeval TIMEVAL;
+typedef struct __ms_timeval *PTIMEVAL;
+typedef struct __ms_timeval *LPTIMEVAL;
+#else
typedef struct timeval TIMEVAL;
typedef struct timeval *PTIMEVAL;
typedef struct timeval *LPTIMEVAL;
+#endif
#ifdef __LP64__
#pragma pop_macro("u_long")
Index: winsock2.h
===================================================================
--- winsock2.h (revision 5287)
+++ winsock2.h (working copy)
@@ -864,7 +864,7 @@
typedef u_short (WSAAPI *LPFN_NTOHS)(u_short netshort);
typedef int (WSAAPI *LPFN_RECV)(SOCKET s,char *buf,int len,int flags);
typedef int (WSAAPI *LPFN_RECVFROM)(SOCKET s,char *buf,int len,int
flags,struct sockaddr *from,int *fromlen);
- typedef int (WSAAPI *LPFN_SELECT)(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const struct timeval *timeout);
+ typedef int (WSAAPI *LPFN_SELECT)(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const PTIMEVAL timeout);
typedef int (WSAAPI *LPFN_SEND)(SOCKET s,const char *buf,int len,int flags);
typedef int (WSAAPI *LPFN_SENDTO)(SOCKET s,const char *buf,int len,int
flags,const struct sockaddr *to,int tolen);
typedef int (WSAAPI *LPFN_SETSOCKOPT)(SOCKET s,int level,int optname,const
char *optval,int optlen);
@@ -983,7 +983,7 @@
WINSOCK_API_LINKAGE int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
WINSOCK_API_LINKAGE int WSAAPI recvfrom(SOCKET s,char *buf,int len,int
flags,struct sockaddr *from,int *fromlen);
#ifndef __INSIDE_CYGWIN__
- WINSOCK_API_LINKAGE int WSAAPI select(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const struct timeval *timeout);
+ WINSOCK_API_LINKAGE int WSAAPI select(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const PTIMEVAL timeout);
#endif /* !__INSIDE_CYGWIN__ */
WINSOCK_API_LINKAGE int WSAAPI send(SOCKET s,const char *buf,int len,int
flags);
WINSOCK_API_LINKAGE int WSAAPI sendto(SOCKET s,const char *buf,int len,int
flags,const struct sockaddr *to,int tolen);
@@ -1156,7 +1156,7 @@
LPSOCKADDR LocalAddress,
LPDWORD RemoteAddressLength,
LPSOCKADDR RemoteAddress,
- const struct timeval *timeout,
+ const PTIMEVAL timeout,
LPWSAOVERLAPPED Reserved
);
@@ -1168,7 +1168,7 @@
LPSOCKADDR LocalAddress,
LPDWORD RemoteAddressLength,
LPSOCKADDR RemoteAddress,
- const struct timeval *timeout,
+ const PTIMEVAL timeout,
LPWSAOVERLAPPED Reserved
);
@@ -1180,7 +1180,7 @@
LPSOCKADDR LocalAddress,
LPDWORD RemoteAddressLength,
LPSOCKADDR RemoteAddress,
- const struct timeval *timeout,
+ const PTIMEVAL timeout,
LPWSAOVERLAPPED Reserved
);
#define WSAConnectByName __MINGW_NAME_AW(WSAConnectByName)
Index: winsock.h
===================================================================
--- winsock.h (revision 5287)
+++ winsock.h (working copy)
@@ -296,7 +296,7 @@
WINSOCK_API_LINKAGE int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
WINSOCK_API_LINKAGE int WSAAPI recvfrom(SOCKET s,char *buf,int len,int
flags,struct sockaddr *from,int *fromlen);
#ifndef __INSIDE_CYGWIN__
- WINSOCK_API_LINKAGE int WSAAPI select(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const struct timeval *timeout);
+ WINSOCK_API_LINKAGE int WSAAPI select(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const PTIMEVAL timeout);
#endif /* !__INSIDE_CYGWIN__ */
WINSOCK_API_LINKAGE int WSAAPI send(SOCKET s,const char *buf,int len,int
flags);
WINSOCK_API_LINKAGE int WSAAPI sendto(SOCKET s,const char *buf,int len,int
flags,const struct sockaddr *to,int tolen);
Index: ws2spi.h
===================================================================
--- ws2spi.h (revision 5286)
+++ ws2spi.h (working copy)
@@ -57,7 +57,7 @@
typedef int (WSPAPI *LPWSPRECV)(SOCKET s,LPWSABUF lpBuffers,DWORD
dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED
lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE
lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
typedef int (WSPAPI *LPWSPRECVDISCONNECT)(SOCKET s,LPWSABUF
lpInboundDisconnectData,LPINT lpErrno);
typedef int (WSPAPI *LPWSPRECVFROM)(SOCKET s,LPWSABUF lpBuffers,DWORD
dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,struct sockaddr
*lpFrom,LPINT lpFromlen,LPWSAOVERLAPPED
lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE
lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
- typedef int (WSPAPI *LPWSPSELECT)(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const struct timeval *timeout,LPINT lpErrno);
+ typedef int (WSPAPI *LPWSPSELECT)(int nfds,fd_set *readfds,fd_set
*writefds,fd_set *exceptfds,const PTIMEVAL timeout,LPINT lpErrno);
typedef int (WSPAPI *LPWSPSEND)(SOCKET s,LPWSABUF lpBuffers,DWORD
dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,LPWSAOVERLAPPED
lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE
lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
typedef int (WSPAPI *LPWSPSENDDISCONNECT)(SOCKET s,LPWSABUF
lpOutboundDisconnectData,LPINT lpErrno);
typedef int (WSPAPI *LPWSPSENDTO)(SOCKET s,LPWSABUF lpBuffers,DWORD
dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,const struct sockaddr
*lpTo,int iTolen,LPWSAOVERLAPPED
lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE
lpCompletionRoutine,LPWSATHREADID lpThreadId,LPINT lpErrno);
Index: ws2tcpip.h
===================================================================
--- ws2tcpip.h (revision 5286)
+++ ws2tcpip.h (working copy)
@@ -338,23 +338,23 @@
WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName,
DWORD dwNameSpace,
LPGUID lpNspId,const ADDRINFOEXA
*pHints,PADDRINFOEXA *ppResult,
- struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ PTIMEVAL timeout,LPOVERLAPPED
lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
LPHANDLE lpNameHandle);
WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR
pServiceName,DWORD dwNameSpace,
LPGUID lpNspId,const ADDRINFOEXW
*pHints,PADDRINFOEXW *ppResult,
- struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ PTIMEVAL timeout,LPOVERLAPPED
lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
LPHANDLE lpNameHandle);
WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName,
SOCKET_ADDRESS *pAddresses,
DWORD dwAddressCount,LPBLOB
lpBlob,DWORD dwFlags,DWORD dwNameSpace,
- LPGUID lpNspId,struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ LPGUID lpNspId,PTIMEVAL
timeout,LPOVERLAPPED lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
LPHANDLE lpNameHandle);
WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR
pServiceName,SOCKET_ADDRESS *pAddresses,
DWORD dwAddressCount,LPBLOB
lpBlob,DWORD dwFlags,DWORD dwNameSpace,
- LPGUID lpNspId,struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ LPGUID lpNspId,PTIMEVAL
timeout,LPOVERLAPPED lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
LPHANDLE lpNameHandle);
@@ -365,24 +365,24 @@
#define LPFN_GETADDRINFOEX __MINGW_NAME_AW(LPFN_GETADDRINFOEX)
typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName,
DWORD dwNameSpace,
LPGUID lpNspId,const ADDRINFOEXA
*pHints,PADDRINFOEXA *ppResult,
- struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ PTIMEVAL timeout,LPOVERLAPPED
lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE
lpCompletionRoutine,
LPHANDLE lpNameHandle);
typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR
pServiceName,DWORD dwNameSpace,
LPGUID lpNspId,const ADDRINFOEXW
*pHints,PADDRINFOEXW *ppResult,
- struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ PTIMEVAL timeout,LPOVERLAPPED
lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE
lpCompletionRoutine,
LPHANDLE lpNameHandle);
#define LPFN_SETADDRINFOEX __MINGW_NAME_AW(LPFN_SETADDRINFOEX)
typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName,
SOCKET_ADDRESS *pAddresses,
DWORD dwAddressCount,LPBLOB
lpBlob,DWORD dwFlags,DWORD dwNameSpace,
- LPGUID lpNspId,struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ LPGUID lpNspId,PTIMEVAL
timeout,LPOVERLAPPED lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE
lpCompletionRoutine,
LPHANDLE lpNameHandle);
typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR
pServiceName,SOCKET_ADDRESS *pAddresses,
DWORD dwAddressCount,LPBLOB
lpBlob,DWORD dwFlags,DWORD dwNameSpace,
- LPGUID lpNspId,struct timeval
*timeout,LPOVERLAPPED lpOverlapped,
+ LPGUID lpNspId,PTIMEVAL
timeout,LPOVERLAPPED lpOverlapped,
LPLOOKUPSERVICE_COMPLETION_ROUTINE
lpCompletionRoutine,
LPHANDLE lpNameHandle);
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public