Alexandre Julliard : ws2_32: Define a common header struct for async queries, and switch to 32-bit types.

Alexandre Julliard julliard at winehq.org
Wed Sep 30 10:56:06 CDT 2009


Module: wine
Branch: master
Commit: 6905a6c2ad40ed12b3e014e7433eee37f50c51c8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6905a6c2ad40ed12b3e014e7433eee37f50c51c8

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Sep 29 18:25:05 2009 +0200

ws2_32: Define a common header struct for async queries, and switch to 32-bit types.

---

 dlls/ws2_32/async.c |   79 ++++++++++++++++++++++++++------------------------
 1 files changed, 41 insertions(+), 38 deletions(-)

diff --git a/dlls/ws2_32/async.c b/dlls/ws2_32/async.c
index 157c35b..5948aa8 100644
--- a/dlls/ws2_32/async.c
+++ b/dlls/ws2_32/async.c
@@ -132,7 +132,7 @@ UINT wsaHerrno(int errnr);
 
 #define AQ_WIN16	0x00
 #define AQ_WIN32	0x04
-#define HB_WIN32(hb) (hb->flags & AQ_WIN32)
+#define HB_WIN32(hb) (hb->query.flags & AQ_WIN32)
 #define AQ_COPYPTR1	0x10
 #define AQ_DUPLOWPTR1	0x20
 #define AQ_MASKPTR1	0x30
@@ -144,12 +144,21 @@ UINT wsaHerrno(int errnr);
 /* 16-bit values are used internally (to be sure handle comparison works right in 16-bit apps). */
 #define WSA_H32(h16) ((HANDLE)(ULONG_PTR)(h16))
 
+struct async_query_header
+{
+    HWND   hWnd;
+    UINT   uMsg;
+    void  *sbuf;
+    INT    sbuflen;
+    UINT   flags;
+    HANDLE handle;
+};
+
 /* Generic async query struct. we use symbolic names for the different queries
  * for readability.
  */
 typedef struct _async_query {
-	HWND16		hWnd;
-	UINT16		uMsg;
+    struct async_query_header query;
 	LPCSTR		ptr1;
 #define host_name	ptr1
 #define host_addr	ptr1
@@ -163,12 +172,6 @@ typedef struct _async_query {
 #define serv_port	int1
 	int		int2;
 #define host_type	int2
-	SEGPTR		sbuf;
-	INT16		sbuflen;
-
-	HANDLE16	async_handle;
-	int		flags;
-	int		qt;
     char xbuf[1];
 } async_query;
 
@@ -202,10 +205,10 @@ static int list_dup(char** l_src, char* ref, char* base, int item_size)
    return (p - ref);
 }
 
-static DWORD finish_query( async_query *aq, LPARAM lparam )
+static DWORD finish_query( struct async_query_header *query, LPARAM lparam )
 {
-    PostMessageW( HWND_32(aq->hWnd), aq->uMsg, (WPARAM)aq->async_handle, lparam );
-    HeapFree( GetProcessHeap(), 0, aq );
+    PostMessageW( query->hWnd, query->uMsg, (WPARAM)query->handle, lparam );
+    HeapFree( GetProcessHeap(), 0, query );
     return 0;
 }
 
@@ -274,7 +277,7 @@ static DWORD WINAPI async_gethostbyname(LPVOID arg)
     int size = 0;
     WORD fail = 0;
     struct hostent *he;
-    char *copy_hostent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
+    char *copy_hostent = HB_WIN32(aq) ? aq->query.sbuf : MapSL((SEGPTR)aq->query.sbuf);
 #ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
     char *extrabuf;
     int ebufsize=1024;
@@ -298,13 +301,13 @@ static DWORD WINAPI async_gethostbyname(LPVOID arg)
         ebufsize *=2;
         extrabuf=HeapReAlloc(GetProcessHeap(),0,extrabuf,ebufsize) ;
     }
-    if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
+    if (he) size = WS_copy_he(copy_hostent, aq->query.sbuf, aq->query.sbuflen, he, aq->query.flags);
     else fail = ((locerr < 0) ? wsaErrno() : wsaHerrno(locerr));
     HeapFree(GetProcessHeap(),0,extrabuf);
 #else
     EnterCriticalSection( &csWSgetXXXbyYYY );
     he = gethostbyname(aq->host_name);
-    if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
+    if (he) size = WS_copy_he(copy_hostent, aq->query.sbuf, aq->query.sbuflen, he, aq->query.flags);
     else fail = ((h_errno < 0) ? wsaErrno() : wsaHerrno(h_errno));
     LeaveCriticalSection( &csWSgetXXXbyYYY );
 #endif
@@ -314,7 +317,7 @@ static DWORD WINAPI async_gethostbyname(LPVOID arg)
     }
 
 done:
-    return finish_query( aq, MAKELPARAM( size, fail ));
+    return finish_query( &aq->query, MAKELPARAM( size, fail ));
 }
 
 static DWORD WINAPI async_gethostbyaddr(LPVOID arg)
@@ -323,7 +326,7 @@ static DWORD WINAPI async_gethostbyaddr(LPVOID arg)
     int size = 0;
     WORD fail = 0;
     struct hostent *he;
-    char *copy_hostent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
+    char *copy_hostent = HB_WIN32(aq) ? aq->query.sbuf : MapSL((SEGPTR)aq->query.sbuf);
 #ifdef HAVE_LINUX_GETHOSTBYNAME_R_6
     char *extrabuf;
     int ebufsize=1024;
@@ -338,13 +341,13 @@ static DWORD WINAPI async_gethostbyaddr(LPVOID arg)
         ebufsize *=2;
         extrabuf=HeapReAlloc(GetProcessHeap(),0,extrabuf,ebufsize) ;
     }
-    if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
+    if (he) size = WS_copy_he(copy_hostent, aq->query.sbuf, aq->query.sbuflen, he, aq->query.flags);
     else fail = ((locerr < 0) ? wsaErrno() : wsaHerrno(locerr));
     HeapFree(GetProcessHeap(),0,extrabuf);
 #else
     EnterCriticalSection( &csWSgetXXXbyYYY );
     he = gethostbyaddr(aq->host_addr,aq->host_len,aq->host_type);
-    if (he) size = WS_copy_he(copy_hostent,(char*)aq->sbuf,aq->sbuflen,he,aq->flags);
+    if (he) size = WS_copy_he(copy_hostent, aq->query.sbuf, aq->query.sbuflen, he, aq->query.flags);
     else fail = ((h_errno < 0) ? wsaErrno() : wsaHerrno(h_errno));
     LeaveCriticalSection( &csWSgetXXXbyYYY );
 #endif
@@ -352,7 +355,7 @@ static DWORD WINAPI async_gethostbyaddr(LPVOID arg)
         fail = WSAENOBUFS;
         size = -size;
     }
-    return finish_query( aq, MAKELPARAM( size, fail ));
+    return finish_query( &aq->query, MAKELPARAM( size, fail ));
 }
 
 /* ----- protoent */
@@ -414,11 +417,11 @@ static DWORD WINAPI async_getprotobyname(LPVOID arg)
 
 #ifdef HAVE_GETPROTOBYNAME
     struct protoent *pe;
-    char *copy_protoent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
+    char *copy_protoent = HB_WIN32(aq) ? aq->query.sbuf : MapSL((SEGPTR)aq->query.sbuf);
     EnterCriticalSection( &csWSgetXXXbyYYY );
     pe = getprotobyname(aq->proto_name);
     if (pe) {
-        size = WS_copy_pe(copy_protoent,(char*)aq->sbuf,aq->sbuflen,pe,aq->flags);
+        size = WS_copy_pe(copy_protoent, aq->query.sbuf, aq->query.sbuflen, pe, aq->query.flags);
         if (size < 0) {
             fail = WSAENOBUFS;
             size = -size;
@@ -432,7 +435,7 @@ static DWORD WINAPI async_getprotobyname(LPVOID arg)
 #else
     fail = WSANO_DATA;
 #endif
-    return finish_query( aq, MAKELPARAM( size, fail ));
+    return finish_query( &aq->query, MAKELPARAM( size, fail ));
 }
 
 static DWORD WINAPI async_getprotobynumber(LPVOID arg)
@@ -443,11 +446,11 @@ static DWORD WINAPI async_getprotobynumber(LPVOID arg)
 
 #ifdef HAVE_GETPROTOBYNUMBER
     struct protoent *pe;
-    char *copy_protoent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
+    char *copy_protoent = HB_WIN32(aq) ? aq->query.sbuf : MapSL((SEGPTR)aq->query.sbuf);
     EnterCriticalSection( &csWSgetXXXbyYYY );
     pe = getprotobynumber(aq->proto_number);
     if (pe) {
-        size = WS_copy_pe(copy_protoent,(char*)aq->sbuf,aq->sbuflen,pe,aq->flags);
+        size = WS_copy_pe(copy_protoent, aq->query.sbuf, aq->query.sbuflen, pe, aq->query.flags);
         if (size < 0) {
             fail = WSAENOBUFS;
             size = -size;
@@ -461,7 +464,7 @@ static DWORD WINAPI async_getprotobynumber(LPVOID arg)
 #else
     fail = WSANO_DATA;
 #endif
-    return finish_query( aq, MAKELPARAM( size, fail ));
+    return finish_query( &aq->query, MAKELPARAM( size, fail ));
 }
 
 /* ----- servent */
@@ -527,12 +530,12 @@ static DWORD WINAPI async_getservbyname(LPVOID arg)
     int size = 0;
     WORD fail = 0;
     struct servent *se;
-    char *copy_servent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
+    char *copy_servent = HB_WIN32(aq) ? aq->query.sbuf : MapSL((SEGPTR)aq->query.sbuf);
 
     EnterCriticalSection( &csWSgetXXXbyYYY );
     se = getservbyname(aq->serv_name,aq->serv_proto);
     if (se) {
-        size = WS_copy_se(copy_servent,(char*)aq->sbuf,aq->sbuflen,se,aq->flags);
+        size = WS_copy_se(copy_servent, aq->query.sbuf, aq->query.sbuflen, se, aq->query.flags);
         if (size < 0) {
             fail = WSAENOBUFS;
             size = -size;
@@ -544,7 +547,7 @@ static DWORD WINAPI async_getservbyname(LPVOID arg)
         fail = WSANO_DATA;
     }
     LeaveCriticalSection( &csWSgetXXXbyYYY );
-    return finish_query( aq, MAKELPARAM( size, fail ));
+    return finish_query( &aq->query, MAKELPARAM( size, fail ));
 }
 
 static DWORD WINAPI async_getservbyport(LPVOID arg)
@@ -553,13 +556,13 @@ static DWORD WINAPI async_getservbyport(LPVOID arg)
     int size = 0;
     WORD fail = 0;
     struct servent *se;
-    char *copy_servent = HB_WIN32(aq) ? (char*)aq->sbuf : (char*)MapSL(aq->sbuf);
+    char *copy_servent = HB_WIN32(aq) ? aq->query.sbuf : MapSL((SEGPTR)aq->query.sbuf);
 
     EnterCriticalSection( &csWSgetXXXbyYYY );
 #ifdef HAVE_GETSERVBYPORT
     se = getservbyport(aq->serv_port,aq->serv_proto);
     if (se) {
-        size = WS_copy_se(copy_servent,(char*)aq->sbuf,aq->sbuflen,se,aq->flags);
+        size = WS_copy_se(copy_servent, aq->query.sbuf, aq->query.sbuflen, se, aq->query.flags);
         if (size < 0) {
             fail = WSAENOBUFS;
             size = -size;
@@ -574,7 +577,7 @@ static DWORD WINAPI async_getservbyport(LPVOID arg)
     fail = WSANO_DATA;
 #endif
     LeaveCriticalSection( &csWSgetXXXbyYYY );
-    return finish_query( aq, MAKELPARAM( size, fail ));
+    return finish_query( &aq->query, MAKELPARAM( size, fail ));
 }
 
 
@@ -630,17 +633,17 @@ static HANDLE16 __WSAsyncDBQuery( HWND hWnd, UINT uMsg, LPTHREAD_START_ROUTINE f
 	case AQ_DUPLOWPTR2: pfm = ptr2; ptr2 = pto; do *pto++ = tolower(*pfm); while (*pfm++);	break;
 	}
 
-	aq->hWnd	= HWND_16(hWnd);
-	aq->uMsg	= uMsg;
+	aq->query.hWnd	= hWnd;
+	aq->query.uMsg	= uMsg;
 	aq->int1	= int1;
 	aq->ptr1	= ptr1;
 	aq->int2	= int2;
 	aq->ptr2	= ptr2;
 	/* avoid async_handle = 0 */
-	aq->async_handle = (++__ws_async_handle ? __ws_async_handle : ++__ws_async_handle);
-	aq->flags	= flags;
-	aq->sbuf	= (SEGPTR)sbuf;
-	aq->sbuflen	= sbuflen;
+	aq->query.handle  = UlongToHandle(++__ws_async_handle ? __ws_async_handle : ++__ws_async_handle);
+	aq->query.flags   = flags;
+	aq->query.sbuf    = sbuf;
+	aq->query.sbuflen = sbuflen;
 
 	thread = CreateThread( NULL, 0, func, aq, 0, NULL );
         if (!thread)




More information about the wine-cvs mailing list