wininet: use unions instead of defines in async work requests

Mike McCormack mike at codeweavers.com
Wed Sep 24 04:24:13 CDT 2003


ChangeLog:
* wininet: use unions instead of defines in async work requests
-------------- next part --------------
Index: dlls/wininet/ftp.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/ftp.c,v
retrieving revision 1.32
diff -u -r1.32 ftp.c
--- dlls/wininet/ftp.c	5 Sep 2003 23:08:28 -0000	1.32
+++ dlls/wininet/ftp.c	23 Sep 2003 05:58:18 -0000
@@ -169,13 +169,14 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPPUTFILEA *req = &workRequest.u.FtpPutFileA;
 
 	workRequest.asyncall = FTPPUTFILEA;
-	workRequest.HFTPSESSION = (DWORD)hConnect;
-	workRequest.LPSZLOCALFILE = (DWORD)FTP_strdup(lpszLocalFile);
-	workRequest.LPSZNEWREMOTEFILE = (DWORD)FTP_strdup(lpszNewRemoteFile);
-	workRequest.DWFLAGS = dwFlags;
-	workRequest.DWCONTEXT = dwContext;
+	workRequest.handle = hConnect;
+	req->lpszLocalFile = FTP_strdup(lpszLocalFile);
+	req->lpszNewRemoteFile = FTP_strdup(lpszNewRemoteFile);
+	req->dwFlags = dwFlags;
+	req->dwContext = dwContext;
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -296,10 +297,12 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPSETCURRENTDIRECTORYA *req;
 
         workRequest.asyncall = FTPSETCURRENTDIRECTORYA;
-	workRequest.HFTPSESSION = (DWORD)hConnect;
-        workRequest.LPSZDIRECTORY = (DWORD)FTP_strdup(lpszDirectory);
+	workRequest.handle = hConnect;
+        req = &workRequest.u.FtpSetCurrentDirectoryA;
+        req->lpszDirectory = FTP_strdup(lpszDirectory);
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -420,10 +423,12 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPCREATEDIRECTORYA *req;
 
         workRequest.asyncall = FTPCREATEDIRECTORYA;
-	workRequest.HFTPSESSION = (DWORD)hConnect;
-	workRequest.LPSZDIRECTORY = (DWORD)FTP_strdup(lpszDirectory);
+	workRequest.handle = hConnect;
+        req = &workRequest.u.FtpCreateDirectoryA;
+	req->lpszDirectory = FTP_strdup(lpszDirectory);
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -543,13 +548,15 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPFINDFIRSTFILEA *req;
 
         workRequest.asyncall = FTPFINDFIRSTFILEA;
-	workRequest.HFTPSESSION = (DWORD)hConnect;
-	workRequest.LPSZSEARCHFILE = (DWORD)FTP_strdup(lpszSearchFile);
-	workRequest.LPFINDFILEDATA = (DWORD)lpFindFileData;
-	workRequest.DWFLAGS = dwFlags;
-	workRequest.DWCONTEXT= dwContext;
+	workRequest.handle = hConnect;
+        req = &workRequest.u.FtpFindFirstFileA;
+	req->lpszSearchFile = FTP_strdup(lpszSearchFile);
+	req->lpFindFileData = lpFindFileData;
+	req->dwFlags = dwFlags;
+	req->dwContext= dwContext;
 
 	INTERNET_AsyncCall(&workRequest);
 	return NULL;
@@ -702,11 +709,13 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPGETCURRENTDIRECTORYA *req;
 
         workRequest.asyncall =  FTPGETCURRENTDIRECTORYA;
-	workRequest.HFTPSESSION = (DWORD)hFtpSession;
-	workRequest.LPSZDIRECTORY = (DWORD)lpszCurrentDirectory;
-	workRequest.LPDWDIRECTORY = (DWORD)lpdwCurrentDirectory;
+	workRequest.handle = hFtpSession;
+        req = &workRequest.u.FtpGetCurrentDirectoryA;
+	req->lpszDirectory = lpszCurrentDirectory;
+	req->lpdwDirectory = lpdwCurrentDirectory;
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -848,13 +857,15 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPOPENFILEA *req;
 
         workRequest.asyncall = FTPOPENFILEA;
-	workRequest.HFTPSESSION = (DWORD)hFtpSession;
-	workRequest.LPSZFILENAME = (DWORD)FTP_strdup(lpszFileName);
-	workRequest.FDWACCESS = fdwAccess;
-	workRequest.DWFLAGS = dwFlags;
-	workRequest.DWCONTEXT = dwContext;
+	workRequest.handle = hFtpSession;
+        req = &workRequest.u.FtpOpenFileA;
+	req->lpszFilename = FTP_strdup(lpszFileName);
+	req->dwAccess = fdwAccess;
+	req->dwFlags = dwFlags;
+	req->dwContext = dwContext;
 
 	INTERNET_AsyncCall(&workRequest);
 	return NULL;
@@ -1000,15 +1011,17 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPGETFILEA *req;
 
         workRequest.asyncall = FTPGETFILEA;
-	workRequest.HFTPSESSION = (DWORD)hInternet;
-	workRequest.LPSZREMOTEFILE = (DWORD)FTP_strdup(lpszRemoteFile);
-	workRequest.LPSZNEWFILE = (DWORD)FTP_strdup(lpszNewFile);
-	workRequest.DWLOCALFLAGSATTRIBUTE  = dwLocalFlagsAttribute;
-	workRequest.FFAILIFEXISTS = (DWORD)fFailIfExists;
-	workRequest.DWFLAGS = dwInternetFlags;
-	workRequest.DWCONTEXT = dwContext;
+	workRequest.handle = hInternet;
+        req = &workRequest.u.FtpGetFileA;
+	req->lpszRemoteFile = FTP_strdup(lpszRemoteFile);
+	req->lpszNewFile = FTP_strdup(lpszNewFile);
+	req->dwLocalFlagsAttribute = dwLocalFlagsAttribute;
+	req->fFailIfExists = fFailIfExists;
+	req->dwFlags = dwInternetFlags;
+	req->dwContext = dwContext;
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -1149,10 +1162,12 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPDELETEFILEA *req;
 
-        workRequest.asyncall = FTPRENAMEFILEA;
-	workRequest.HFTPSESSION = (DWORD)hFtpSession;
-	workRequest.LPSZFILENAME = (DWORD)FTP_strdup(lpszFileName);
+        workRequest.asyncall = FTPDELETEFILEA;
+	workRequest.handle = hFtpSession;
+        req = &workRequest.u.FtpDeleteFileA;
+	req->lpszFilename = FTP_strdup(lpszFileName);
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -1243,10 +1258,12 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPREMOVEDIRECTORYA *req;
 
         workRequest.asyncall = FTPREMOVEDIRECTORYA;
-	workRequest.HFTPSESSION = (DWORD)hFtpSession;
-	workRequest.LPSZDIRECTORY = (DWORD)FTP_strdup(lpszDirectory);
+	workRequest.handle = hFtpSession;
+        req = &workRequest.u.FtpRemoveDirectoryA;
+	req->lpszDirectory = FTP_strdup(lpszDirectory);
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -1338,11 +1355,13 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_FTPRENAMEFILEA *req;
 
         workRequest.asyncall = FTPRENAMEFILEA;
-	workRequest.HFTPSESSION = (DWORD)hFtpSession;
-	workRequest.LPSZSRCFILE = (DWORD)FTP_strdup(lpszSrc);
-	workRequest.LPSZDESTFILE = (DWORD)FTP_strdup(lpszDest);
+	workRequest.handle = hFtpSession;
+        req = &workRequest.u.FtpRenameFileA;
+	req->lpszSrcFile = FTP_strdup(lpszSrc);
+	req->lpszDestFile = FTP_strdup(lpszDest);
 
 	return INTERNET_AsyncCall(&workRequest);
     }
Index: dlls/wininet/http.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/http.c,v
retrieving revision 1.41
diff -u -r1.41 http.c
--- dlls/wininet/http.c	5 Sep 2003 23:08:28 -0000	1.41
+++ dlls/wininet/http.c	23 Sep 2003 05:58:19 -0000
@@ -243,22 +243,24 @@
     if (0)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_HTTPOPENREQUESTA *req;
 
 	workRequest.asyncall = HTTPOPENREQUESTA;
-	workRequest.HFTPSESSION = (DWORD)hHttpSession;
-	workRequest.LPSZVERB = (DWORD)HTTP_strdup(lpszVerb);
-	workRequest.LPSZOBJECTNAME = (DWORD)HTTP_strdup(lpszObjectName);
+	workRequest.handle = hHttpSession;
+        req = &workRequest.u.HttpOpenRequestA;
+	req->lpszVerb = HTTP_strdup(lpszVerb);
+	req->lpszObjectName = HTTP_strdup(lpszObjectName);
         if (lpszVersion)
-            workRequest.LPSZVERSION = (DWORD)HTTP_strdup(lpszVersion);
+            req->lpszVersion = HTTP_strdup(lpszVersion);
         else
-            workRequest.LPSZVERSION = 0;
+            req->lpszVersion = 0;
         if (lpszReferrer)
-            workRequest.LPSZREFERRER = (DWORD)HTTP_strdup(lpszReferrer);
+            req->lpszReferrer = HTTP_strdup(lpszReferrer);
         else
-            workRequest.LPSZREFERRER = 0;
-	workRequest.LPSZACCEPTTYPES = (DWORD)lpszAcceptTypes;
-	workRequest.DWFLAGS = dwFlags;
-	workRequest.DWCONTEXT = dwContext;
+            req->lpszReferrer = 0;
+	req->lpszAcceptTypes = lpszAcceptTypes;
+	req->dwFlags = dwFlags;
+	req->dwContext = dwContext;
 
         INTERNET_AsyncCall(&workRequest);
         TRACE ("returning NULL\n");
@@ -972,16 +974,18 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_HTTPSENDREQUESTA *req;
 
         workRequest.asyncall = HTTPSENDREQUESTA;
-        workRequest.HFTPSESSION = (DWORD)hHttpRequest;
+        workRequest.handle = hHttpRequest;
+        req = &workRequest.u.HttpSendRequestA;
         if (lpszHeaders)
-            workRequest.LPSZHEADER = (DWORD)HTTP_strdup(lpszHeaders);
+            req->lpszHeader = HTTP_strdup(lpszHeaders);
         else
-            workRequest.LPSZHEADER = 0;
-        workRequest.DWHEADERLENGTH = dwHeaderLength;
-        workRequest.LPOPTIONAL = (DWORD)lpOptional;
-        workRequest.DWOPTIONALLENGTH = dwOptionalLength;
+            req->lpszHeader = 0;
+        req->dwHeaderLength = dwHeaderLength;
+        req->lpOptional = lpOptional;
+        req->dwOptionalLength = dwOptionalLength;
 
         INTERNET_AsyncCall(&workRequest);
         /*
Index: dlls/wininet/internet.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/internet.c,v
retrieving revision 1.67
diff -u -r1.67 internet.c
--- dlls/wininet/internet.c	22 Sep 2003 19:45:50 -0000	1.67
+++ dlls/wininet/internet.c	23 Sep 2003 05:58:20 -0000
@@ -593,10 +593,12 @@
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
+        struct WORKREQ_INTERNETFINDNEXTA *req;
 
         workRequest.asyncall = INTERNETFINDNEXTA;
-	workRequest.HFTPSESSION = (DWORD)hFind;
-	workRequest.LPFINDFILEDATA = (DWORD)lpvFindData;
+	workRequest.handle = hFind;
+        req = &workRequest.u.InternetFindNextA;
+	req->lpFindFileData = lpvFindData;
 
 	return INTERNET_AsyncCall(&workRequest);
     }
@@ -2146,120 +2148,159 @@
 
     TRACE("\n");
 
-    if (INTERNET_GetWorkRequest(&workRequest))
+    if (!INTERNET_GetWorkRequest(&workRequest))
+        return;
+    TRACE("Got work %d\n", workRequest.asyncall);
+    switch (workRequest.asyncall)
     {
-	TRACE("Got work %d\n", workRequest.asyncall);
-	switch (workRequest.asyncall)
-	{
-            case FTPPUTFILEA:
-		FTP_FtpPutFileA((HINTERNET)workRequest.HFTPSESSION, (LPCSTR)workRequest.LPSZLOCALFILE,
-                    (LPCSTR)workRequest.LPSZNEWREMOTEFILE, workRequest.DWFLAGS, workRequest.DWCONTEXT);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZLOCALFILE);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZNEWREMOTEFILE);
-		break;
+    case FTPPUTFILEA:
+        {
+        struct WORKREQ_FTPPUTFILEA *req = &workRequest.u.FtpPutFileA;
 
-            case FTPSETCURRENTDIRECTORYA:
-		FTP_FtpSetCurrentDirectoryA((HINTERNET)workRequest.HFTPSESSION,
-			(LPCSTR)workRequest.LPSZDIRECTORY);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZDIRECTORY);
-		break;
+	FTP_FtpPutFileA(workRequest.handle, req->lpszLocalFile,
+                   req->lpszNewRemoteFile, req->dwFlags, req->dwContext);
 
-            case FTPCREATEDIRECTORYA:
-		FTP_FtpCreateDirectoryA((HINTERNET)workRequest.HFTPSESSION,
-			(LPCSTR)workRequest.LPSZDIRECTORY);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZDIRECTORY);
-		break;
+	HeapFree(GetProcessHeap(), 0, req->lpszLocalFile);
+	HeapFree(GetProcessHeap(), 0, req->lpszNewRemoteFile);
+        }
+	break;
 
-            case FTPFINDFIRSTFILEA:
-                FTP_FtpFindFirstFileA((HINTERNET)workRequest.HFTPSESSION,
-			(LPCSTR)workRequest.LPSZSEARCHFILE,
-	           (LPWIN32_FIND_DATAA)workRequest.LPFINDFILEDATA, workRequest.DWFLAGS,
-		   workRequest.DWCONTEXT);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZSEARCHFILE);
-		break;
+    case FTPSETCURRENTDIRECTORYA:
+        {
+        struct WORKREQ_FTPSETCURRENTDIRECTORYA *req;
 
-            case FTPGETCURRENTDIRECTORYA:
-                FTP_FtpGetCurrentDirectoryA((HINTERNET)workRequest.HFTPSESSION,
-			(LPSTR)workRequest.LPSZDIRECTORY, (LPDWORD)workRequest.LPDWDIRECTORY);
-		break;
+        req = &workRequest.u.FtpSetCurrentDirectoryA;
+	FTP_FtpSetCurrentDirectoryA(workRequest.handle, req->lpszDirectory);
+	HeapFree(GetProcessHeap(), 0, req->lpszDirectory);
+        }
+	break;
 
-            case FTPOPENFILEA:
-                 FTP_FtpOpenFileA((HINTERNET)workRequest.HFTPSESSION,
-                    (LPCSTR)workRequest.LPSZFILENAME,
-                    workRequest.FDWACCESS,
-                    workRequest.DWFLAGS,
-                    workRequest.DWCONTEXT);
-                 HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZFILENAME);
-                 break;
-
-            case FTPGETFILEA:
-                FTP_FtpGetFileA((HINTERNET)workRequest.HFTPSESSION,
-                    (LPCSTR)workRequest.LPSZREMOTEFILE,
-                    (LPCSTR)workRequest.LPSZNEWFILE,
-                    (BOOL)workRequest.FFAILIFEXISTS,
-                    workRequest.DWLOCALFLAGSATTRIBUTE,
-                    workRequest.DWFLAGS,
-                    workRequest.DWCONTEXT);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZREMOTEFILE);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZNEWFILE);
-		break;
+    case FTPCREATEDIRECTORYA:
+        {
+        struct WORKREQ_FTPCREATEDIRECTORYA *req;
 
-            case FTPDELETEFILEA:
-                FTP_FtpDeleteFileA((HINTERNET)workRequest.HFTPSESSION,
-			(LPCSTR)workRequest.LPSZFILENAME);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZFILENAME);
-		break;
+        req = &workRequest.u.FtpCreateDirectoryA;
+	FTP_FtpCreateDirectoryA(workRequest.handle, req->lpszDirectory);
+	HeapFree(GetProcessHeap(), 0, req->lpszDirectory);
+        }
+	break;
 
-            case FTPREMOVEDIRECTORYA:
-                FTP_FtpRemoveDirectoryA((HINTERNET)workRequest.HFTPSESSION,
-			(LPCSTR)workRequest.LPSZDIRECTORY);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZDIRECTORY);
-		break;
+    case FTPFINDFIRSTFILEA:
+        {
+        struct WORKREQ_FTPFINDFIRSTFILEA *req;
 
-            case FTPRENAMEFILEA:
-                FTP_FtpRenameFileA((HINTERNET)workRequest.HFTPSESSION,
-			(LPCSTR)workRequest.LPSZSRCFILE,
-			(LPCSTR)workRequest.LPSZDESTFILE);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZSRCFILE);
-		HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZDESTFILE);
-		break;
+        req = &workRequest.u.FtpFindFirstFileA;
+        FTP_FtpFindFirstFileA(workRequest.handle, req->lpszSearchFile,
+           req->lpFindFileData, req->dwFlags, req->dwContext);
+	HeapFree(GetProcessHeap(), 0, req->lpszSearchFile);
+        }
+	break;
 
-            case INTERNETFINDNEXTA:
-		INTERNET_FindNextFileA((HINTERNET)workRequest.HFTPSESSION,
-                    (LPWIN32_FIND_DATAA)workRequest.LPFINDFILEDATA);
-		break;
+    case FTPGETCURRENTDIRECTORYA:
+        {
+        struct WORKREQ_FTPGETCURRENTDIRECTORYA *req;
 
-            case HTTPSENDREQUESTA:
-               HTTP_HttpSendRequestA((HINTERNET)workRequest.HFTPSESSION,
-                       (LPCSTR)workRequest.LPSZHEADER,
-                       workRequest.DWHEADERLENGTH,
-                       (LPVOID)workRequest.LPOPTIONAL,
-                       workRequest.DWOPTIONALLENGTH);
-               HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZHEADER);
-               break;
-
-            case HTTPOPENREQUESTA:
-               HTTP_HttpOpenRequestA((HINTERNET)workRequest.HFTPSESSION,
-                       (LPCSTR)workRequest.LPSZVERB,
-                       (LPCSTR)workRequest.LPSZOBJECTNAME,
-                       (LPCSTR)workRequest.LPSZVERSION,
-                       (LPCSTR)workRequest.LPSZREFERRER,
-                       (LPCSTR*)workRequest.LPSZACCEPTTYPES,
-                       workRequest.DWFLAGS,
-                       workRequest.DWCONTEXT);
-               HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZVERB);
-               HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZOBJECTNAME);
-               HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZVERSION);
-               HeapFree(GetProcessHeap(), 0, (LPVOID)workRequest.LPSZREFERRER);
-                break;
-
-            case SENDCALLBACK:
-               SendAsyncCallbackInt((LPWININETAPPINFOA)workRequest.param1,
-                       (HINTERNET)workRequest.param2, workRequest.param3,
-                        workRequest.param4, (LPVOID)workRequest.param5,
-                        workRequest.param6);
-               break;
-	}
+        req = &workRequest.u.FtpGetCurrentDirectoryA;
+        FTP_FtpGetCurrentDirectoryA(workRequest.handle,
+		req->lpszDirectory, req->lpdwDirectory);
+        }
+	break;
+
+    case FTPOPENFILEA:
+        {
+        struct WORKREQ_FTPOPENFILEA *req = &workRequest.u.FtpOpenFileA;
+
+        FTP_FtpOpenFileA(workRequest.handle, req->lpszFilename,
+            req->dwAccess, req->dwFlags, req->dwContext);
+        HeapFree(GetProcessHeap(), 0, req->lpszFilename);
+        }
+        break;
+
+    case FTPGETFILEA:
+        {
+        struct WORKREQ_FTPGETFILEA *req = &workRequest.u.FtpGetFileA;
+
+        FTP_FtpGetFileA(workRequest.handle, req->lpszRemoteFile,
+                 req->lpszNewFile, req->fFailIfExists,
+                 req->dwLocalFlagsAttribute, req->dwFlags, req->dwContext);
+	HeapFree(GetProcessHeap(), 0, req->lpszRemoteFile);
+	HeapFree(GetProcessHeap(), 0, req->lpszNewFile);
+        }
+	break;
+
+    case FTPDELETEFILEA:
+        {
+        struct WORKREQ_FTPDELETEFILEA *req = &workRequest.u.FtpDeleteFileA;
+
+        FTP_FtpDeleteFileA(workRequest.handle, req->lpszFilename);
+	HeapFree(GetProcessHeap(), 0, req->lpszFilename);
+        }
+	break;
+
+    case FTPREMOVEDIRECTORYA:
+        {
+        struct WORKREQ_FTPREMOVEDIRECTORYA *req;
+
+        req = &workRequest.u.FtpRemoveDirectoryA;
+        FTP_FtpRemoveDirectoryA(workRequest.handle, req->lpszDirectory);
+	HeapFree(GetProcessHeap(), 0, req->lpszDirectory);
+        }
+	break;
+
+    case FTPRENAMEFILEA:
+        {
+        struct WORKREQ_FTPRENAMEFILEA *req = &workRequest.u.FtpRenameFileA;
+
+        FTP_FtpRenameFileA(workRequest.handle, req->lpszSrcFile, req->lpszDestFile);
+	HeapFree(GetProcessHeap(), 0, req->lpszSrcFile);
+	HeapFree(GetProcessHeap(), 0, req->lpszDestFile);
+        }
+	break;
+
+    case INTERNETFINDNEXTA:
+        {
+        struct WORKREQ_INTERNETFINDNEXTA *req;
+
+        req = &workRequest.u.InternetFindNextA;
+	INTERNET_FindNextFileA(workRequest.handle, req->lpFindFileData);
+        }
+	break;
+
+    case HTTPSENDREQUESTA:
+        {
+        struct WORKREQ_HTTPSENDREQUESTA *req = &workRequest.u.HttpSendRequestA;
+
+        HTTP_HttpSendRequestA(workRequest.handle, req->lpszHeader,
+                req->dwHeaderLength, req->lpOptional, req->dwOptionalLength);
+
+        HeapFree(GetProcessHeap(), 0, req->lpszHeader);
+        }
+        break;
+
+    case HTTPOPENREQUESTA:
+        {
+        struct WORKREQ_HTTPOPENREQUESTA *req = &workRequest.u.HttpOpenRequestA;
+
+        HTTP_HttpOpenRequestA(workRequest.handle, req->lpszVerb,
+            req->lpszObjectName, req->lpszVersion, req->lpszReferrer,
+            req->lpszAcceptTypes, req->dwFlags, req->dwContext);
+
+        HeapFree(GetProcessHeap(), 0, req->lpszVerb);
+        HeapFree(GetProcessHeap(), 0, req->lpszObjectName);
+        HeapFree(GetProcessHeap(), 0, req->lpszVersion);
+        HeapFree(GetProcessHeap(), 0, req->lpszReferrer);
+        }
+        break;
+
+    case SENDCALLBACK:
+        {
+        struct WORKREQ_SENDCALLBACK *req = &workRequest.u.SendCallback;
+
+        SendAsyncCallbackInt(workRequest.handle, req->hHttpSession,
+                req->dwContext, req->dwInternetStatus, req->lpvStatusInfo,
+                req->dwStatusInfoLength);
+        }
+        break;
     }
 }
 
Index: dlls/wininet/internet.h
===================================================================
RCS file: /home/wine/wine/dlls/wininet/internet.h,v
retrieving revision 1.15
diff -u -r1.15 internet.h
--- dlls/wininet/internet.h	5 Aug 2003 19:21:08 -0000	1.15
+++ dlls/wininet/internet.h	23 Sep 2003 05:58:20 -0000
@@ -177,50 +177,126 @@
     SENDCALLBACK,
 } ASYNC_FUNC;
 
+struct WORKREQ_FTPPUTFILEA
+{
+    LPSTR lpszLocalFile;
+    LPSTR lpszNewRemoteFile;
+    DWORD  dwFlags;
+    DWORD  dwContext;
+};
+
+struct WORKREQ_FTPSETCURRENTDIRECTORYA
+{
+    LPSTR lpszDirectory;
+};
+
+struct WORKREQ_FTPCREATEDIRECTORYA
+{
+    LPSTR lpszDirectory;
+};
+
+struct WORKREQ_FTPFINDFIRSTFILEA
+{
+    LPSTR lpszSearchFile;
+    LPWIN32_FIND_DATAA lpFindFileData;
+    DWORD  dwFlags;
+    DWORD  dwContext;
+};
+
+struct WORKREQ_FTPGETCURRENTDIRECTORYA
+{
+    LPSTR lpszDirectory;
+    DWORD *lpdwDirectory;
+};
+
+struct WORKREQ_FTPOPENFILEA
+{
+    LPSTR lpszFilename;
+    DWORD  dwAccess;
+    DWORD  dwFlags;
+    DWORD  dwContext;
+};
+
+struct WORKREQ_FTPGETFILEA
+{
+    LPSTR lpszRemoteFile;
+    LPSTR lpszNewFile;
+    BOOL   fFailIfExists;
+    DWORD  dwLocalFlagsAttribute;
+    DWORD  dwFlags;
+    DWORD  dwContext;
+};
+
+struct WORKREQ_FTPDELETEFILEA
+{
+    LPSTR lpszFilename;
+};
+
+struct WORKREQ_FTPREMOVEDIRECTORYA
+{
+    LPSTR lpszDirectory;
+};
+
+struct WORKREQ_FTPRENAMEFILEA
+{
+    LPSTR lpszSrcFile;
+    LPSTR lpszDestFile;
+};
+
+struct WORKREQ_INTERNETFINDNEXTA
+{
+    LPWIN32_FIND_DATAA lpFindFileData;
+};
+
+struct WORKREQ_HTTPOPENREQUESTA
+{
+    LPSTR lpszVerb;
+    LPSTR lpszObjectName;
+    LPSTR lpszVersion;
+    LPSTR lpszReferrer;
+    LPCSTR *lpszAcceptTypes;
+    DWORD  dwFlags;
+    DWORD  dwContext;
+};
+
+struct WORKREQ_HTTPSENDREQUESTA
+{
+    LPSTR lpszHeader;
+    DWORD  dwHeaderLength;
+    LPVOID lpOptional;
+    DWORD  dwOptionalLength;
+};
+
+struct WORKREQ_SENDCALLBACK
+{
+    HINTERNET hHttpSession;
+    DWORD     dwContext;
+    DWORD     dwInternetStatus;
+    LPVOID    lpvStatusInfo;
+    DWORD     dwStatusInfoLength;
+};
+
 typedef struct WORKREQ
 {
     ASYNC_FUNC asyncall;
-    DWORD param1;
-#define HFTPSESSION       param1
-
-    DWORD param2;
-#define LPSZLOCALFILE     param2
-#define LPSZREMOTEFILE    param2
-#define LPSZFILENAME      param2
-#define LPSZSRCFILE       param2
-#define LPSZDIRECTORY     param2
-#define LPSZSEARCHFILE    param2
-#define LPSZHEADER        param2
-#define LPSZVERB          param2
-
-    DWORD param3;
-#define LPSZNEWREMOTEFILE param3
-#define LPSZNEWFILE       param3
-#define LPFINDFILEDATA    param3
-#define LPDWDIRECTORY     param3
-#define FDWACCESS         param3
-#define LPSZDESTFILE      param3
-#define DWHEADERLENGTH    param3
-#define LPSZOBJECTNAME    param3
-
-    DWORD param4;
-#define DWFLAGS           param4
-#define LPOPTIONAL        param4
-
-    DWORD param5;
-#define DWCONTEXT         param5
-#define DWOPTIONALLENGTH  param5
-
-    DWORD param6;
-#define FFAILIFEXISTS     param6
-#define LPSZVERSION       param6
-
-    DWORD param7;
-#define DWLOCALFLAGSATTRIBUTE param7
-#define LPSZREFERRER          param7
+    HINTERNET handle;
 
-    DWORD param8;
-#define LPSZACCEPTTYPES       param8
+    union {
+        struct WORKREQ_FTPPUTFILEA              FtpPutFileA;
+        struct WORKREQ_FTPSETCURRENTDIRECTORYA  FtpSetCurrentDirectoryA;
+        struct WORKREQ_FTPCREATEDIRECTORYA      FtpCreateDirectoryA;
+        struct WORKREQ_FTPFINDFIRSTFILEA        FtpFindFirstFileA;
+        struct WORKREQ_FTPGETCURRENTDIRECTORYA  FtpGetCurrentDirectoryA;
+        struct WORKREQ_FTPOPENFILEA             FtpOpenFileA;
+        struct WORKREQ_FTPGETFILEA              FtpGetFileA;
+        struct WORKREQ_FTPDELETEFILEA           FtpDeleteFileA;
+        struct WORKREQ_FTPREMOVEDIRECTORYA      FtpRemoveDirectoryA;
+        struct WORKREQ_FTPRENAMEFILEA           FtpRenameFileA;
+        struct WORKREQ_INTERNETFINDNEXTA        InternetFindNextA;
+        struct WORKREQ_HTTPOPENREQUESTA         HttpOpenRequestA;
+        struct WORKREQ_HTTPSENDREQUESTA         HttpSendRequestA;
+        struct WORKREQ_SENDCALLBACK             SendCallback;
+    } u;
 
     struct WORKREQ *next;
     struct WORKREQ *prev;
Index: dlls/wininet/utility.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/utility.c,v
retrieving revision 1.12
diff -u -r1.12 utility.c
--- dlls/wininet/utility.c	5 Sep 2003 23:08:28 -0000	1.12
+++ dlls/wininet/utility.c	23 Sep 2003 05:58:20 -0000
@@ -202,15 +202,16 @@
         if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
         {
             WORKREQUEST workRequest;
+            struct WORKREQ_SENDCALLBACK *req;
 
             workRequest.asyncall = SENDCALLBACK;
-
-            workRequest.param1 = (DWORD)hIC;
-            workRequest.param2 = (DWORD)hHttpSession;
-            workRequest.param3 = dwContext;
-            workRequest.param4 = dwInternetStatus;
-            workRequest.param5 = (DWORD)lpvStatusInfo;
-            workRequest.param6 = dwStatusInfoLength;
+            workRequest.handle = hIC;
+            req = &workRequest.u.SendCallback;
+            req->hHttpSession = hHttpSession;
+            req->dwContext = dwContext;
+            req->dwInternetStatus = dwInternetStatus;
+            req->lpvStatusInfo = lpvStatusInfo;
+            req->dwStatusInfoLength = dwStatusInfoLength;
 
             INTERNET_AsyncCall(&workRequest);
         }


More information about the wine-patches mailing list