WININET: convert WININETAPPINFOA structure to unicode

Mike McCormack mike at codeweavers.com
Wed Mar 24 02:10:31 CST 2004


Since the wininet DLL is quite large, and is almost completely ASCII 
based, this is the first step towards converting it to unicode.

Mike


ChangeLog:
* convert WININETAPPINFOA structure to unicode
-------------- next part --------------
? dlls/wininet/wininet.spec.c
? dlls/wininet/tests/wininet_test.exe.spec.c
Index: dlls/wininet/dialogs.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/dialogs.c,v
retrieving revision 1.2
diff -u -r1.2 dialogs.c
--- dlls/wininet/dialogs.c	5 Sep 2003 23:08:28 -0000	1.2
+++ dlls/wininet/dialogs.c	24 Mar 2004 07:20:52 -0000
@@ -56,12 +56,12 @@
  *
  *  Determine the name of the proxy server the request is using
  */
-static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPSTR szBuf, DWORD sz )
+static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz )
 {
     LPWININETHTTPREQA lpwhr = (LPWININETHTTPREQA) hRequest;
     LPWININETHTTPSESSIONA lpwhs = NULL;
-    LPWININETAPPINFOA hIC = NULL;
-    LPSTR p;
+    LPWININETAPPINFOW hIC = NULL;
+    LPWSTR p;
 
     if (NULL == lpwhr)
 	return FALSE;
@@ -70,14 +70,14 @@
     if (NULL == lpwhs)
 	return FALSE;
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
     if (NULL == hIC)
 	return FALSE;
 
-    strncpy(szBuf, hIC->lpszProxy, sz);
+    strncpyW(szBuf, hIC->lpszProxy, sz);
 
     /* FIXME: perhaps it would be better to use InternetCrackUrl here */
-    p = strchr(szBuf, ':');
+    p = strchrW(szBuf, ':');
     if(*p)
         *p = 0;
 
@@ -89,14 +89,15 @@
  *
  *  Determine the name of the (basic) Authentication realm
  */
-static BOOL WININET_GetAuthRealm( HINTERNET hRequest, LPSTR szBuf, DWORD sz )
+static BOOL WININET_GetAuthRealm( HINTERNET hRequest, LPWSTR szBuf, DWORD sz )
 {
-    LPSTR p, q;
+    LPWSTR p, q;
     DWORD index;
+    WCHAR szRealm[] = { 'r','e','a','l','m','=',0 };
 
     /* extract the Realm from the proxy response and show it */
     index = 0;
-    if( !HttpQueryInfoA( hRequest, HTTP_QUERY_PROXY_AUTHENTICATE,
+    if( !HttpQueryInfoW( hRequest, HTTP_QUERY_PROXY_AUTHENTICATE,
                          szBuf, &sz, &index) )
         return FALSE;
 
@@ -104,21 +105,21 @@
      * FIXME: maybe we should check that we're
      * dealing with 'Basic' Authentication
      */
-    p = strchr( szBuf, ' ' );
-    if( p && !strncmp( p+1, "realm=", 6 ) )
+    p = strchrW( szBuf, ' ' );
+    if( p && !strncmpW( p+1, szRealm, strlenW(szRealm) ) )
     {
         /* remove quotes */
         p += 7;
         if( *p == '"' )
         {
             p++;
-            q = strrchr( p, '"' );
+            q = strrchrW( p, '"' );
             if( q )
                 *q = 0;
         }
     }
 
-    strcpy( szBuf, p );
+    strcpyW( szBuf, p );
 
     return TRUE;
 }
@@ -126,50 +127,62 @@
 /***********************************************************************
  *         WININET_GetSetPassword
  */
-static BOOL WININET_GetSetPassword( HWND hdlg, LPCSTR szServer, 
-                                    LPCSTR szRealm, BOOL bSet )
+static BOOL WININET_GetSetPassword( HWND hdlg, LPCWSTR szServer, 
+                                    LPCWSTR szRealm, BOOL bSet )
 {
-    CHAR szResource[0x80], szUserPass[0x40];
-    LPSTR p;
+    WCHAR szResource[0x80], szUserPass[0x40];
+    LPWSTR p;
     HWND hUserItem, hPassItem;
     DWORD r, dwMagic = 19;
-    UINT len;
+    UINT r_len, u_len;
     WORD sz;
+    WCHAR szColon[] = { ':',0 }, szbs[] = { '/', 0 };
 
     hUserItem = GetDlgItem( hdlg, IDC_USERNAME );
     hPassItem = GetDlgItem( hdlg, IDC_PASSWORD );
 
     /* now try fetch the username and password */
-    strcpy( szResource, szServer);
-    strcat( szResource, "/");
-    strcat( szResource, szRealm);
+    lstrcpyW( szResource, szServer);
+    lstrcatW( szResource, szbs);
+    lstrcatW( szResource, szRealm);
 
+    /*
+     * WNetCachePassword is only concerned with the length
+     * of the data stored (which we tell it) and it does
+     * not use strlen() internally so we can add WCHAR data
+     * instead of ASCII data and get it back the same way.
+     */
     if( bSet )
     {
         szUserPass[0] = 0;
-        GetWindowTextA( hUserItem, szUserPass, sizeof szUserPass-1 );
-        strcat(szUserPass, ":");
-        len = strlen( szUserPass );
-        GetWindowTextA( hPassItem, szUserPass+len, sizeof szUserPass-len );
-
-        r = WNetCachePassword( szResource, strlen( szResource ) + 1,
-                            szUserPass, strlen( szUserPass ) + 1, dwMagic, 0 );
+        GetWindowTextW( hUserItem, szUserPass, 
+                        (sizeof szUserPass-1)/sizeof(WCHAR) );
+        lstrcatW(szUserPass, szColon);
+        u_len = strlenW( szUserPass );
+        GetWindowTextW( hPassItem, szUserPass+u_len, 
+                        (sizeof szUserPass)/sizeof(WCHAR)-u_len );
+
+        r_len = (strlenW( szResource ) + 1)*sizeof(WCHAR);
+        u_len = (strlenW( szUserPass ) + 1)*sizeof(WCHAR);
+        r = WNetCachePassword( (CHAR*)szResource, r_len,
+                               (CHAR*)szUserPass, u_len, dwMagic, 0 );
 
         return ( r == WN_SUCCESS );
     }
 
     sz = sizeof szUserPass;
-    r = WNetGetCachedPassword( szResource, strlen( szResource ) + 1,
-                               szUserPass, &sz, dwMagic );
+    r_len = (strlenW( szResource ) + 1)*sizeof(WCHAR);
+    r = WNetGetCachedPassword( (CHAR*)szResource, r_len,
+                               (CHAR*)szUserPass, &sz, dwMagic );
     if( r != WN_SUCCESS )
         return FALSE;
 
-    p = strchr( szUserPass, ':' );
+    p = strchrW( szUserPass, ':' );
     if( p )
     {
         *p = 0;
-        SetWindowTextA( hUserItem, szUserPass );
-        SetWindowTextA( hPassItem, p+1 );
+        SetWindowTextW( hUserItem, szUserPass );
+        SetWindowTextW( hPassItem, p+1 );
     }
 
     return TRUE;
@@ -179,12 +192,12 @@
  *         WININET_SetProxyAuthorization
  */
 static BOOL WININET_SetProxyAuthorization( HINTERNET hRequest,
-                                         LPSTR username, LPSTR password )
+                                         LPWSTR username, LPWSTR password )
 {
     LPWININETHTTPREQA lpwhr = (LPWININETHTTPREQA) hRequest;
     LPWININETHTTPSESSIONA lpwhs;
-    LPWININETAPPINFOA hIC;
-    LPSTR p;
+    LPWININETAPPINFOW hIC;
+    LPWSTR p;
 
     lpwhs = (LPWININETHTTPSESSIONA) lpwhr->hdr.lpwhparent;
     if (NULL == lpwhs ||  lpwhs->hdr.htype != WH_HHTTPSESSION)
@@ -193,20 +206,20 @@
 	return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
 
-    p = HeapAlloc( GetProcessHeap(), 0, strlen( username ) + 1 );
+    p = HeapAlloc( GetProcessHeap(), 0, (strlenW( username ) + 1)*sizeof(WCHAR) );
     if( !p )
         return FALSE;
     
-    strcpy( p, username );
+    lstrcpyW( p, username );
     hIC->lpszProxyUsername = p;
 
-    p = HeapAlloc( GetProcessHeap(), 0, strlen( password ) + 1 );
+    p = HeapAlloc( GetProcessHeap(), 0, (strlenW( password ) + 1)*sizeof(WCHAR) );
     if( !p )
         return FALSE;
     
-    strcpy( p, password );
+    lstrcpyW( p, password );
     hIC->lpszProxyPassword = p;
 
     return TRUE;
@@ -220,7 +233,7 @@
 {
     HWND hitem;
     struct WININET_ErrorDlgParams *params;
-    CHAR szRealm[0x80], szServer[0x80];
+    WCHAR szRealm[0x80], szServer[0x80];
 
     if( uMsg == WM_INITDIALOG )
     {
@@ -232,18 +245,18 @@
 
         /* extract the Realm from the proxy response and show it */
         if( WININET_GetAuthRealm( params->hRequest,
-                                  szRealm, sizeof szRealm) )
+                                  szRealm, sizeof szRealm/sizeof(WCHAR)) )
         {
             hitem = GetDlgItem( hdlg, IDC_REALM );
-            SetWindowTextA( hitem, szRealm );
+            SetWindowTextW( hitem, szRealm );
         }
 
         /* extract the name of the proxy server */
         if( WININET_GetProxyServer( params->hRequest, 
-                                    szServer, sizeof szServer) )
+                                    szServer, sizeof szServer/sizeof(WCHAR)) )
         {
             hitem = GetDlgItem( hdlg, IDC_PROXY );
-            SetWindowTextA( hitem, szServer );
+            SetWindowTextW( hitem, szServer );
         }
 
         WININET_GetSetPassword( hdlg, szServer, szRealm, FALSE );
@@ -260,25 +273,25 @@
         if( wParam == IDOK )
         {
             LPWININETHTTPREQA lpwhr = (LPWININETHTTPREQA) params->hRequest;
-            CHAR username[0x20], password[0x20];
+            WCHAR username[0x20], password[0x20];
 
             username[0] = 0;
             hitem = GetDlgItem( hdlg, IDC_USERNAME );
             if( hitem )
-                GetWindowTextA( hitem, username, sizeof username );
+                GetWindowTextW( hitem, username, sizeof username/sizeof(WCHAR) );
             
             password[0] = 0;
             hitem = GetDlgItem( hdlg, IDC_PASSWORD );
             if( hitem )
-                GetWindowTextA( hitem, password, sizeof password );
+                GetWindowTextW( hitem, password, sizeof password/sizeof(WCHAR) );
 
             hitem = GetDlgItem( hdlg, IDC_SAVEPASSWORD );
             if( hitem &&
-                SendMessageA( hitem, BM_GETSTATE, 0, 0 ) &&
+                SendMessageW( hitem, BM_GETSTATE, 0, 0 ) &&
                 WININET_GetAuthRealm( params->hRequest,
-                                  szRealm, sizeof szRealm) &&
+                                  szRealm, sizeof szRealm/sizeof(WCHAR)) &&
                 WININET_GetProxyServer( params->hRequest, 
-                                    szServer, sizeof szServer) )
+                                    szServer, sizeof szServer/sizeof(WCHAR)) )
             {
                 WININET_GetSetPassword( hdlg, szServer, szRealm, TRUE );
             }
@@ -302,17 +315,17 @@
  */
 static INT WININET_GetConnectionStatus( HINTERNET hRequest )
 {
-    CHAR szStatus[0x20];
+    WCHAR szStatus[0x20];
     DWORD sz, index, dwStatus;
 
     TRACE("%p\n", hRequest );
 
     sz = sizeof szStatus;
     index = 0;
-    if( !HttpQueryInfoA( hRequest, HTTP_QUERY_STATUS_CODE,
+    if( !HttpQueryInfoW( hRequest, HTTP_QUERY_STATUS_CODE,
                     szStatus, &sz, &index))
         return -1;
-    dwStatus = atoi( szStatus );
+    dwStatus = atoiW( szStatus );
 
     TRACE("request %p status = %ld\n", hRequest, dwStatus );
 
Index: dlls/wininet/ftp.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/ftp.c,v
retrieving revision 1.38
diff -u -r1.38 ftp.c
--- dlls/wininet/ftp.c	16 Feb 2004 20:24:15 -0000	1.38
+++ dlls/wininet/ftp.c	24 Mar 2004 07:20:53 -0000
@@ -158,7 +158,7 @@
     LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hConnect );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -167,7 +167,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -204,7 +204,7 @@
 {
     HANDLE hFile = NULL;
     BOOL bSuccess = FALSE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
     INT nResCode;
 
@@ -228,7 +228,7 @@
         goto lend;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->lpfnStatusCB)
         hIC->lpfnStatusCB(hConnect, lpwfs->hdr.dwContext, INTERNET_STATUS_SENDING_REQUEST, NULL, 0);
 
@@ -287,7 +287,7 @@
 BOOL WINAPI FtpSetCurrentDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hConnect );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -298,7 +298,7 @@
 
     TRACE("lpszDirectory(%s)\n", lpszDirectory);
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -360,7 +360,7 @@
 {
     INT nResCode;
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     DWORD bSuccess = FALSE;
 
     TRACE("lpszDirectory(%s)\n", lpszDirectory);
@@ -375,7 +375,7 @@
     /* Clear any error information */
     INTERNET_SetLastError(0);
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (!FTP_SendCommand(lpwfs->sndSocket, FTP_CMD_CWD, lpszDirectory,
         hIC->lpfnStatusCB, hConnect, lpwfs->hdr.dwContext))
         goto lend;
@@ -418,7 +418,7 @@
 BOOL WINAPI FtpCreateDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hConnect );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -427,7 +427,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -489,7 +489,7 @@
 {
     INT nResCode;
     BOOL bSuccess = FALSE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
 
     TRACE("\n");
@@ -518,7 +518,7 @@
     }
 
 lend:
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC && hIC->lpfnStatusCB)
     {
         INTERNET_ASYNC_RESULT iar;
@@ -547,7 +547,7 @@
     LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD dwContext)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hConnect );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -556,7 +556,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -613,7 +613,7 @@
     LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD dwContext)
 {
     INT nResCode;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
     HINTERNET hFindNext = NULL;
 
@@ -638,7 +638,7 @@
     if (!FTP_SendPortOrPasv(lpwfs))
         goto lend;
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (!FTP_SendCommand(lpwfs->sndSocket, FTP_CMD_LIST, lpszSearchFile,
         hIC->lpfnStatusCB, hConnect, lpwfs->hdr.dwContext))
         goto lend;
@@ -708,7 +708,7 @@
     LPDWORD lpdwCurrentDirectory)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     TRACE("len(%ld)\n", *lpdwCurrentDirectory);
 
@@ -719,7 +719,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -774,7 +774,7 @@
 {
     INT nResCode;
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     DWORD bSuccess = FALSE;
 
     TRACE("len(%ld)\n", *lpdwCurrentDirectory);
@@ -791,7 +791,7 @@
 
     ZeroMemory(lpszCurrentDirectory, *lpdwCurrentDirectory);
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (!FTP_SendCommand(lpwfs->sndSocket, FTP_CMD_PWD, NULL,
         hIC->lpfnStatusCB, hFtpSession, lpwfs->hdr.dwContext))
         goto lend;
@@ -855,7 +855,7 @@
     DWORD dwContext)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hFtpSession );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -869,7 +869,7 @@
 	return FALSE;
     }
     
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -929,7 +929,7 @@
     INT nDataSocket;
     BOOL bSuccess = FALSE;
     LPWININETFILE lpwh = NULL;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
     HINTERNET handle = NULL;
 
@@ -975,7 +975,7 @@
     if (lpwfs->lstnSocket != -1)
         close(lpwfs->lstnSocket);
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC && hIC->lpfnStatusCB)
     {
         INTERNET_ASYNC_RESULT iar;
@@ -1013,7 +1013,7 @@
     DWORD dwContext)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hInternet );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -1027,7 +1027,7 @@
 	return FALSE;
     }
     
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -1089,7 +1089,7 @@
     DWORD nBytes;
     BOOL bSuccess = FALSE;
     HANDLE hFile;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
 
     TRACE("lpszRemoteFile(%s) lpszNewFile(%s)\n", lpszRemoteFile, lpszNewFile);
@@ -1144,7 +1144,7 @@
     if (hFile)
         CloseHandle(hFile);
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC && hIC->lpfnStatusCB)
     {
         INTERNET_ASYNC_RESULT iar;
@@ -1172,7 +1172,7 @@
 BOOL WINAPI FtpDeleteFileA(HINTERNET hFtpSession, LPCSTR lpszFileName)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hFtpSession );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -1181,7 +1181,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -1215,7 +1215,7 @@
 {
     INT nResCode;
     BOOL bSuccess = FALSE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
 
     TRACE("0x%08lx\n", (ULONG) hFtpSession);
@@ -1243,7 +1243,7 @@
             FTP_SetResponseError(nResCode);
     }
 lend:
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC && hIC->lpfnStatusCB)
     {
         INTERNET_ASYNC_RESULT iar;
@@ -1271,7 +1271,7 @@
 BOOL WINAPI FtpRemoveDirectoryA(HINTERNET hFtpSession, LPCSTR lpszDirectory)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hFtpSession );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -1280,7 +1280,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -1314,7 +1314,7 @@
 {
     INT nResCode;
     BOOL bSuccess = FALSE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
 
     TRACE("\n");
@@ -1343,7 +1343,7 @@
     }
 
 lend:
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC && hIC->lpfnStatusCB)
     {
         INTERNET_ASYNC_RESULT iar;
@@ -1371,7 +1371,7 @@
 BOOL WINAPI FtpRenameFileA(HINTERNET hFtpSession, LPCSTR lpszSrc, LPCSTR lpszDest)
 {
     LPWININETFTPSESSIONA lpwfs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     lpwfs = (LPWININETFTPSESSIONA) WININET_GetObject( hFtpSession );
     if (NULL == lpwfs || WH_HFTPSESSION != lpwfs->hdr.htype)
@@ -1380,7 +1380,7 @@
         return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC)
     {
         WORKREQUEST workRequest;
@@ -1414,7 +1414,7 @@
 {
     INT nResCode;
     BOOL bSuccess = FALSE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFTPSESSIONA lpwfs;
 
     TRACE("\n");
@@ -1449,7 +1449,7 @@
         FTP_SetResponseError(nResCode);
 
 lend:
-    hIC = (LPWININETAPPINFOA) lpwfs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwfs->hdr.lpwhparent;
     if (hIC->hdr.dwFlags & INTERNET_FLAG_ASYNC && hIC->lpfnStatusCB)
     {
         INTERNET_ASYNC_RESULT iar;
@@ -1482,7 +1482,7 @@
     struct sockaddr_in socketAddr;
     struct hostent *phe = NULL;
     INT nsocket = -1, sock_namelen;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     BOOL bSuccess = FALSE;
     LPWININETFTPSESSIONA lpwfs = NULL;
     HINTERNET handle = NULL;
@@ -1491,7 +1491,7 @@
 	    (ULONG) hInternet, lpszServerName,
 	    nServerPort, lpszUserName, lpszPassword);
 
-    hIC = (LPWININETAPPINFOA) WININET_GetObject( hInternet );
+    hIC = (LPWININETAPPINFOW) WININET_GetObject( hInternet );
     if ( (hIC == NULL) || (hIC->hdr.htype != WH_HINIT) )
         goto lerror;
 
Index: dlls/wininet/http.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/http.c,v
retrieving revision 1.52
diff -u -r1.52 http.c
--- dlls/wininet/http.c	22 Mar 2004 21:31:44 -0000	1.52
+++ dlls/wininet/http.c	24 Mar 2004 07:20:53 -0000
@@ -205,7 +205,7 @@
 	DWORD dwFlags, DWORD dwContext)
 {
     LPWININETHTTPSESSIONA lpwhs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     HINTERNET handle = NULL;
 
     TRACE("(%p, %s, %s, %s, %s, %p, %08lx, %08lx)\n", hHttpSession,
@@ -225,7 +225,7 @@
         INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
 	return NULL;
     }
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
 
     /*
      * My tests seem to show that the windows version does not
@@ -381,7 +381,7 @@
 /***********************************************************************
  *  HTTP_Base64
  */
-static UINT HTTP_Base64( LPCSTR bin, LPSTR base64 )
+static UINT HTTP_Base64( LPCWSTR bin, LPWSTR base64 )
 {
     UINT n = 0, x;
     static LPSTR HTTP_Base64Enc = 
@@ -426,26 +426,28 @@
  *
  *  Encode the basic authentication string for HTTP 1.1
  */
-static LPSTR HTTP_EncodeBasicAuth( LPCSTR username, LPCSTR password)
+static LPWSTR HTTP_EncodeBasicAuth( LPCWSTR username, LPCWSTR password)
 {
     UINT len;
-    LPSTR in, out, szBasic = "Basic ";
+    LPWSTR in, out;
+    WCHAR szBasic[] = {'B','a','s','i','c',' ',0};
+    WCHAR szColon[] = {':',0};
 
-    len = strlen( username ) + 1 + strlen ( password ) + 1;
-    in = HeapAlloc( GetProcessHeap(), 0, len );
+    len = lstrlenW( username ) + 1 + lstrlenW ( password ) + 1;
+    in = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
     if( !in )
         return NULL;
 
-    len = strlen(szBasic) +
-          (strlen( username ) + 1 + strlen ( password ))*2 + 1 + 1;
+    len = lstrlenW(szBasic) +
+          (lstrlenW( username ) + 1 + lstrlenW ( password ))*2 + 1 + 1;
     out = HeapAlloc( GetProcessHeap(), 0, len );
     if( out )
     {
-        strcpy( in, username );
-        strcat( in, ":" );
-        strcat( in, password );
-        strcpy( out, szBasic );
-        HTTP_Base64( in, &out[strlen(out)] );
+        lstrcpyW( in, username );
+        lstrcatW( in, szColon );
+        lstrcatW( in, password );
+        lstrcpyW( out, szBasic );
+        HTTP_Base64( in, &out[strlenW(out)] );
     }
     HeapFree( GetProcessHeap(), 0, in );
 
@@ -458,13 +460,19 @@
  *   Insert the basic authorization field in the request header
  */
 BOOL HTTP_InsertProxyAuthorization( LPWININETHTTPREQA lpwhr,
-                       LPCSTR username, LPCSTR password )
+                       LPCWSTR username, LPCWSTR password )
 {
     HTTPHEADERA hdr;
-    INT index;
+    INT index, len;
+    LPWSTR authW;
+
+    authW = HTTP_EncodeBasicAuth( username, password );
+
+    len = WideCharToMultiByte( CP_ACP, 0, authW, -1, NULL, 0, NULL, NULL);
+    hdr.lpszValue = HeapAlloc( GetProcessHeap(), 0, len );
+    WideCharToMultiByte( CP_ACP, 0, authW, -1, hdr.lpszValue, len, NULL, NULL);
 
     hdr.lpszField = "Proxy-Authorization";
-    hdr.lpszValue = HTTP_EncodeBasicAuth( username, password );
     hdr.wFlags = HDR_ISREQUEST;
     hdr.wCount = 0;
     if( !hdr.lpszValue )
@@ -480,6 +488,7 @@
     
     HTTP_InsertCustomHeader(lpwhr, &hdr);
     HeapFree( GetProcessHeap(), 0, hdr.lpszValue );
+    HeapFree( GetProcessHeap(), 0, authW );
     
     return TRUE;
 }
@@ -487,7 +496,7 @@
 /***********************************************************************
  *           HTTP_DealWithProxy
  */
-static BOOL HTTP_DealWithProxy( LPWININETAPPINFOA hIC,
+static BOOL HTTP_DealWithProxy( LPWININETAPPINFOW hIC,
     LPWININETHTTPSESSIONA lpwhs, LPWININETHTTPREQA lpwhr)
 {
     char buf[MAXHOSTNAME];
@@ -500,10 +509,11 @@
     UrlComponents.lpszHostName = buf;
     UrlComponents.dwHostNameLength = MAXHOSTNAME;
 
-    if (strncasecmp(hIC->lpszProxy,"http://",strlen("http://")))
-	sprintf(proxy, "http://%s/", hIC->lpszProxy);
+    WideCharToMultiByte(CP_ACP, 0, hIC->lpszProxy, -1, buf, sizeof buf, NULL, NULL);
+    if (strncasecmp(buf,"http://",strlen("http://")))
+	sprintf(proxy, "http://%s/", buf);
     else
-	strcpy(proxy,hIC->lpszProxy);
+	strcpy(proxy,buf);
     if( !InternetCrackUrlA(proxy, 0, 0, &UrlComponents) )
         return FALSE;
     if( UrlComponents.dwHostNameLength == 0 )
@@ -551,7 +561,7 @@
 	DWORD dwFlags, DWORD dwContext)
 {
     LPWININETHTTPSESSIONA lpwhs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETHTTPREQA lpwhr;
     LPSTR lpszCookies;
     LPSTR lpszUrl = NULL;
@@ -567,7 +577,7 @@
 	return NULL;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
 
     lpwhr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WININETHTTPREQA));
     if (NULL == lpwhr)
@@ -641,8 +651,16 @@
 
     if (hIC->lpszAgent)
     {
-        char *agent_header = HeapAlloc(GetProcessHeap(), 0, strlen(hIC->lpszAgent) + 1 + 14);
-        sprintf(agent_header, "User-Agent: %s\r\n", hIC->lpszAgent);
+        int len = WideCharToMultiByte(CP_ACP, 0, hIC->lpszAgent, -1, NULL, 0, NULL, NULL );
+        char *agent_header, *user_agent = "User-Agent: ";
+
+        agent_header = HeapAlloc( GetProcessHeap(), 0, 
+                                  strlen(user_agent) + len + 3 );
+        strcpy(agent_header, user_agent);
+        WideCharToMultiByte(CP_ACP, 0, hIC->lpszAgent, -1,
+                            agent_header+strlen(user_agent), len, NULL, NULL );
+        strcat(agent_header, "\r\n");
+
         HttpAddRequestHeadersA(handle, agent_header, strlen(agent_header),
                                HTTP_ADDREQ_FLAG_ADD);
         HeapFree(GetProcessHeap(), 0, agent_header);
@@ -1071,7 +1089,7 @@
 {
     LPWININETHTTPREQA lpwhr;
     LPWININETHTTPSESSIONA lpwhs = NULL;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     TRACE("%p, %p (%s), %li, %p, %li)\n", hHttpRequest,
             lpszHeaders, debugstr_a(lpszHeaders), dwHeaderLength, lpOptional, dwOptionalLength);
@@ -1090,7 +1108,7 @@
 	return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
     if (NULL == hIC ||  hIC->hdr.htype != WH_HINIT)
     {
         INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
@@ -1162,7 +1180,7 @@
                                 DWORD dwHeaderLength, LPVOID lpOptional, DWORD dwOptionalLength)
 {
     LPWININETHTTPSESSIONA lpwhs = (LPWININETHTTPSESSIONA) lpwhr->hdr.lpwhparent;
-    LPWININETAPPINFOA hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    LPWININETAPPINFOW hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
     char path[2048];
     HINTERNET handle;
 
@@ -1295,7 +1313,7 @@
     INT headerLength = 0;
     LPWININETHTTPREQA lpwhr;
     LPWININETHTTPSESSIONA lpwhs = NULL;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     BOOL loop_next = FALSE;
     int CustHeaderIndex;
 
@@ -1316,7 +1334,7 @@
 	return FALSE;
     }
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
     if (NULL == hIC ||  hIC->hdr.htype != WH_HINIT)
     {
         INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
@@ -1689,13 +1707,13 @@
 	LPCSTR lpszPassword, DWORD dwFlags, DWORD dwContext)
 {
     BOOL bSuccess = FALSE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETHTTPSESSIONA lpwhs = NULL;
     HINTERNET handle = NULL;
 
     TRACE("-->\n");
 
-    hIC = (LPWININETAPPINFOA) WININET_GetObject( hInternet );
+    hIC = (LPWININETAPPINFOW) WININET_GetObject( hInternet );
     if( (hIC == NULL) || (hIC->hdr.htype != WH_HINIT) )
         goto lerror;
 
@@ -1728,7 +1746,7 @@
     lpwhs->hdr.dwFlags = dwFlags;
     lpwhs->hdr.dwContext = dwContext;
     if(hIC->lpszProxy && hIC->dwAccessType == INTERNET_OPEN_TYPE_PROXY) {
-        if(strchr(hIC->lpszProxy, ' '))
+        if(strchrW(hIC->lpszProxy, ' '))
             FIXME("Several proxies not implemented.\n");
         if(hIC->lpszProxyBypass)
             FIXME("Proxy bypass is ignored.\n");
@@ -1785,7 +1803,7 @@
 {
     BOOL bSuccess = FALSE;
     LPWININETHTTPSESSIONA lpwhs;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     TRACE("-->\n");
 
@@ -1798,7 +1816,7 @@
 
     lpwhs = (LPWININETHTTPSESSIONA)lpwhr->hdr.lpwhparent;
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
     SendAsyncCallback(hIC, lpwhr, lpwhr->hdr.dwContext,
                       INTERNET_STATUS_CONNECTING_TO_SERVER,
                       &(lpwhs->socketAddress),
@@ -2202,14 +2220,14 @@
 
 
     LPWININETHTTPSESSIONA lpwhs = NULL;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     HINTERNET handle;
 
     TRACE("%p\n",lpwhr);
 
     handle = WININET_FindHandle( &lpwhr->hdr );
     lpwhs = (LPWININETHTTPSESSIONA) lpwhr->hdr.lpwhparent;
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
 
     SendAsyncCallback(hIC, lpwhr, lpwhr->hdr.dwContext,
                       INTERNET_STATUS_CLOSING_CONNECTION, 0, 0);
@@ -2234,7 +2252,7 @@
 {
     int i;
     LPWININETHTTPSESSIONA lpwhs = NULL;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     HINTERNET handle;
 
     TRACE("\n");
@@ -2244,7 +2262,7 @@
 
     handle = WININET_FindHandle( &lpwhr->hdr );
     lpwhs = (LPWININETHTTPSESSIONA) lpwhr->hdr.lpwhparent;
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
 
     SendAsyncCallback(hIC, handle, lpwhr->hdr.dwContext,
                       INTERNET_STATUS_HANDLE_CLOSING, lpwhr,
@@ -2286,12 +2304,12 @@
  */
 void HTTP_CloseHTTPSessionHandle(LPWININETHTTPSESSIONA lpwhs)
 {
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     HINTERNET handle;
 
     TRACE("%p\n", lpwhs);
 
-    hIC = (LPWININETAPPINFOA) lpwhs->hdr.lpwhparent;
+    hIC = (LPWININETAPPINFOW) lpwhs->hdr.lpwhparent;
 
     handle = WININET_FindHandle( &lpwhs->hdr );
     SendAsyncCallback(hIC, handle, lpwhs->hdr.dwContext,
Index: dlls/wininet/internet.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/internet.c,v
retrieving revision 1.78
diff -u -r1.78 internet.c
--- dlls/wininet/internet.c	9 Feb 2004 22:07:43 -0000	1.78
+++ dlls/wininet/internet.c	24 Mar 2004 07:20:53 -0000
@@ -72,7 +72,7 @@
 #define RESPONSE_TIMEOUT        30
 
 #define GET_HWININET_FROM_LPWININETFINDNEXT(lpwh) \
-(LPWININETAPPINFOA)(((LPWININETFTPSESSIONA)(lpwh->hdr.lpwhparent))->hdr.lpwhparent)
+(LPWININETAPPINFOW)(((LPWININETFTPSESSIONA)(lpwh->hdr.lpwhparent))->hdr.lpwhparent)
 
 
 typedef struct
@@ -336,12 +336,13 @@
  * The proxy may be specified in the form 'http=proxy.my.org'
  * Presumably that means there can be ftp=ftpproxy.my.org too.
  */
-static BOOL INTERNET_ConfigureProxyFromReg( LPWININETAPPINFOA lpwai )
+static BOOL INTERNET_ConfigureProxyFromReg( LPWININETAPPINFOW lpwai )
 {
     HKEY key;
     DWORD r, keytype, len, enabled;
     LPSTR lpszInternetSettings =
         "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
+    WCHAR szProxyServer[] = { 'P','r','o','x','y','S','e','r','v','e','r', 0 };
 
     r = RegOpenKeyA(HKEY_CURRENT_USER, lpszInternetSettings, &key);
     if ( r != ERROR_SUCCESS )
@@ -355,31 +356,32 @@
         TRACE("Proxy is enabled.\n");
 
         /* figure out how much memory the proxy setting takes */
-        r = RegQueryValueExA( key, "ProxyServer", NULL, &keytype, 
+        r = RegQueryValueExW( key, szProxyServer, NULL, &keytype, 
                               NULL, &len);
         if( (r == ERROR_SUCCESS) && len && (keytype == REG_SZ) )
         {
-            LPSTR szProxy, p, szHttp = "http=";
+            LPWSTR szProxy, p;
+            WCHAR szHttp[] = {'h','t','t','p','=',0};
 
-            szProxy=HeapAlloc( GetProcessHeap(), 0, len+1 );
-            RegQueryValueExA( key, "ProxyServer", NULL, &keytype,
+            szProxy=HeapAlloc( GetProcessHeap(), 0, len );
+            RegQueryValueExW( key, szProxyServer, NULL, &keytype,
                               (BYTE*)szProxy, &len);
 
             /* find the http proxy, and strip away everything else */
-            p = strstr( szProxy, szHttp );
+            p = strstrW( szProxy, szHttp );
             if( p )
             {
-                 p += strlen(szHttp);
-                 strcpy( szProxy, p );
+                 p += lstrlenW(szHttp);
+                 lstrcpyW( szProxy, p );
             }
-            p = strchr( szProxy, ' ' );
+            p = strchrW( szProxy, ' ' );
             if( p )
                 *p = 0;
 
             lpwai->dwAccessType = INTERNET_OPEN_TYPE_PROXY;
             lpwai->lpszProxy = szProxy;
 
-            TRACE("http proxy = %s\n", lpwai->lpszProxy);
+            TRACE("http proxy = %s\n", debugstr_w(lpwai->lpszProxy));
         }
         else
             ERR("Couldn't read proxy server settings.\n");
@@ -401,10 +403,10 @@
  *    NULL on failure
  *
  */
-HINTERNET WINAPI InternetOpenA(LPCSTR lpszAgent, DWORD dwAccessType,
-    LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags)
+HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType,
+    LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)
 {
-    LPWININETAPPINFOA lpwai = NULL;
+    LPWININETAPPINFOW lpwai = NULL;
     HINTERNET handle = NULL;
 
     if (TRACE_ON(wininet)) {
@@ -425,8 +427,8 @@
 	const char *access_type_str = "Unknown";
 	DWORD flag_val = dwFlags;
 	
-	TRACE("(%s, %li, %s, %s, %li)\n", debugstr_a(lpszAgent), dwAccessType,
-	      debugstr_a(lpszProxy), debugstr_a(lpszProxyBypass), dwFlags);
+	TRACE("(%s, %li, %s, %s, %li)\n", debugstr_w(lpszAgent), dwAccessType,
+	      debugstr_w(lpszProxy), debugstr_w(lpszProxyBypass), dwFlags);
 	for (i = 0; i < (sizeof(access_type) / sizeof(access_type[0])); i++) {
 	    if (access_type[i].val == dwAccessType) {
 		access_type_str = access_type[i].name;
@@ -448,14 +450,14 @@
     /* Clear any error information */
     INTERNET_SetLastError(0);
 
-    lpwai = HeapAlloc(GetProcessHeap(), 0, sizeof(WININETAPPINFOA));
+    lpwai = HeapAlloc(GetProcessHeap(), 0, sizeof(WININETAPPINFOW));
     if (NULL == lpwai)
     {
         INTERNET_SetLastError(ERROR_OUTOFMEMORY);
 	goto lend;
     }
  
-    memset(lpwai, 0, sizeof(WININETAPPINFOA));
+    memset(lpwai, 0, sizeof(WININETAPPINFOW));
     lpwai->hdr.htype = WH_HINIT;
     lpwai->hdr.lpwhparent = NULL;
     lpwai->hdr.dwFlags = dwFlags;
@@ -474,26 +476,26 @@
     if (NULL != lpszAgent)
     {
         lpwai->lpszAgent = HeapAlloc( GetProcessHeap(),0,
-                                      strlen(lpszAgent)+1);
+                                      (strlenW(lpszAgent)+1)*sizeof(WCHAR));
         if (lpwai->lpszAgent)
-            strcpy( lpwai->lpszAgent, lpszAgent );
+            lstrcpyW( lpwai->lpszAgent, lpszAgent );
     }
     if(dwAccessType == INTERNET_OPEN_TYPE_PRECONFIG)
         INTERNET_ConfigureProxyFromReg( lpwai );
     else if (NULL != lpszProxy)
     {
         lpwai->lpszProxy = HeapAlloc( GetProcessHeap(), 0,
-                                      strlen(lpszProxy)+1);
+                                      (strlenW(lpszProxy)+1)*sizeof(WCHAR));
         if (lpwai->lpszProxy)
-            strcpy( lpwai->lpszProxy, lpszProxy );
+            lstrcpyW( lpwai->lpszProxy, lpszProxy );
     }
 
     if (NULL != lpszProxyBypass)
     {
         lpwai->lpszProxyBypass = HeapAlloc( GetProcessHeap(), 0,
-                                            strlen(lpszProxyBypass)+1);
+                                     (strlenW(lpszProxyBypass)+1)*sizeof(WCHAR));
         if (lpwai->lpszProxyBypass)
-            strcpy( lpwai->lpszProxyBypass, lpszProxyBypass );
+            lstrcpyW( lpwai->lpszProxyBypass, lpszProxyBypass );
     }
 
  lend:
@@ -513,38 +515,32 @@
  *    NULL on failure
  *
  */
-HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType,
-    LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)
+HINTERNET WINAPI InternetOpenA(LPCSTR lpszAgent, DWORD dwAccessType,
+    LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags)
 {
     HINTERNET rc = (HINTERNET)NULL;
-    INT lenAgent = WideCharToMultiByte(CP_ACP, 0, lpszAgent, -1, NULL, 0, NULL, NULL);
-    INT lenProxy = WideCharToMultiByte(CP_ACP, 0, lpszProxy, -1, NULL, 0, NULL, NULL);
-    INT lenBypass = WideCharToMultiByte(CP_ACP, 0, lpszProxyBypass, -1, NULL, 0, NULL, NULL);
-    CHAR *szAgent = (CHAR *)HeapAlloc(GetProcessHeap(), 0, lenAgent*sizeof(CHAR));
-    CHAR *szProxy = (CHAR *)HeapAlloc(GetProcessHeap(), 0, lenProxy*sizeof(CHAR));
-    CHAR *szBypass = (CHAR *)HeapAlloc(GetProcessHeap(), 0, lenBypass*sizeof(CHAR));
+    INT len;
+    WCHAR *szAgent = NULL, *szProxy = NULL, *szBypass = NULL;
 
-    TRACE("(%s, 0x%08lx, %s, %s, 0x%08lx)\n", debugstr_w(lpszAgent), dwAccessType, debugstr_w(lpszProxy), debugstr_w(lpszProxyBypass), dwFlags);
+    TRACE("(%s, 0x%08lx, %s, %s, 0x%08lx)\n", debugstr_a(lpszAgent),
+       dwAccessType, debugstr_a(lpszProxy), debugstr_a(lpszProxyBypass), dwFlags);
 
     if (!szAgent || !szProxy || !szBypass)
-    {
-        if (szAgent)
-            HeapFree(GetProcessHeap(), 0, szAgent);
-        if (szProxy)
-            HeapFree(GetProcessHeap(), 0, szProxy);
-        if (szBypass)
-            HeapFree(GetProcessHeap(), 0, szBypass);
-        return (HINTERNET)NULL;
-    }
-
-    WideCharToMultiByte(CP_ACP, 0, lpszAgent, -1, szAgent, lenAgent,
-        NULL, NULL);
-    WideCharToMultiByte(CP_ACP, 0, lpszProxy, -1, szProxy, lenProxy,
-        NULL, NULL);
-    WideCharToMultiByte(CP_ACP, 0, lpszProxyBypass, -1, szBypass, lenBypass,
-        NULL, NULL);
+        return rc;
+
+    len = MultiByteToWideChar(CP_ACP, 0, lpszAgent, -1, NULL, 0);
+    szAgent = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, lpszAgent, -1, szAgent, len);
+
+    len = MultiByteToWideChar(CP_ACP, 0, lpszProxy, -1, NULL, 0);
+    szProxy = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, lpszProxy, -1, szProxy, len);
+
+    len = MultiByteToWideChar(CP_ACP, 0, lpszProxyBypass, -1, NULL, 0);
+    szBypass = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, lpszProxyBypass, -1, szBypass, len);
 
-    rc = InternetOpenA(szAgent, dwAccessType, szProxy, szBypass, dwFlags);
+    rc = InternetOpenW(szAgent, dwAccessType, szProxy, szBypass, dwFlags);
 
     HeapFree(GetProcessHeap(), 0, szAgent);
     HeapFree(GetProcessHeap(), 0, szProxy);
@@ -749,7 +745,7 @@
  */
 BOOL WINAPI InternetFindNextFileA(HINTERNET hFind, LPVOID lpvFindData)
 {
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWININETFINDNEXTA lpwh;
 
     TRACE("\n");
@@ -794,7 +790,7 @@
 BOOL WINAPI INTERNET_FindNextFileA(HINTERNET hFind, LPVOID lpvFindData)
 {
     BOOL bSuccess = TRUE;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
     LPWIN32_FIND_DATAA lpFindFileData;
     LPWININETFINDNEXTA lpwh;
 
@@ -863,7 +859,7 @@
  *    Void
  *
  */
-VOID INTERNET_CloseHandle(LPWININETAPPINFOA lpwai)
+VOID INTERNET_CloseHandle(LPWININETAPPINFOW lpwai)
 {
     TRACE("%p\n",lpwai);
 
@@ -921,7 +917,7 @@
 	switch (lpwh->htype)
 	{
 	    case WH_HINIT:
-		INTERNET_CloseHandle((LPWININETAPPINFOA) lpwh);
+		INTERNET_CloseHandle((LPWININETAPPINFOW) lpwh);
 		retval = TRUE;
 		break;
 
@@ -1461,9 +1457,9 @@
 	HINTERNET hInternet ,INTERNET_STATUS_CALLBACK lpfnIntCB)
 {
     INTERNET_STATUS_CALLBACK retVal;
-    LPWININETAPPINFOA lpwai;
+    LPWININETAPPINFOW lpwai;
 
-    lpwai = (LPWININETAPPINFOA)WININET_GetObject(hInternet);
+    lpwai = (LPWININETAPPINFOW)WININET_GetObject(hInternet);
     if (!lpwai)
         return NULL;
 
@@ -2126,12 +2122,12 @@
     LPCSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD dwContext)
 {
     HINTERNET ret = NULL;
-    LPWININETAPPINFOA hIC = NULL;
+    LPWININETAPPINFOW hIC = NULL;
 
     TRACE("(%p, %s, %s, %08lx, %08lx, %08lx\n", hInternet, debugstr_a(lpszUrl), debugstr_a(lpszHeaders),
  	  dwHeadersLength, dwFlags, dwContext);
  
-    hIC = (LPWININETAPPINFOA) WININET_GetObject( hInternet );
+    hIC = (LPWININETAPPINFOW) WININET_GetObject( hInternet );
     if (NULL == hIC ||  hIC->hdr.htype != WH_HINIT) {
 	INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE);
  	goto lend;
Index: dlls/wininet/internet.h
===================================================================
RCS file: /home/wine/wine/dlls/wininet/internet.h,v
retrieving revision 1.21
diff -u -r1.21 internet.h
--- dlls/wininet/internet.h	9 Feb 2004 22:01:49 -0000	1.21
+++ dlls/wininet/internet.h	24 Mar 2004 07:20:53 -0000
@@ -85,14 +85,14 @@
 typedef struct
 {
     WININETHANDLEHEADER hdr;
-    LPSTR  lpszAgent;
-    LPSTR  lpszProxy;
-    LPSTR  lpszProxyBypass;
-    LPSTR  lpszProxyUsername;
-    LPSTR  lpszProxyPassword;
+    LPWSTR  lpszAgent;
+    LPWSTR  lpszProxy;
+    LPWSTR  lpszProxyBypass;
+    LPWSTR  lpszProxyUsername;
+    LPWSTR  lpszProxyPassword;
     DWORD   dwAccessType;
     INTERNET_STATUS_CALLBACK lpfnStatusCB;
-} WININETAPPINFOA, *LPWININETAPPINFOA;
+} WININETAPPINFOW, *LPWININETAPPINFOW;
 
 
 typedef struct
@@ -382,16 +382,16 @@
 void HTTP_CloseHTTPSessionHandle(LPWININETHTTPSESSIONA lpwhs);
 void HTTP_CloseHTTPRequestHandle(LPWININETHTTPREQA lpwhr);
 
-VOID SendAsyncCallback(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
+VOID SendAsyncCallback(LPWININETAPPINFOW hIC, HINTERNET hHttpSession,
                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
                              lpvStatusInfo , DWORD dwStatusInfoLength);
 
-VOID SendAsyncCallbackInt(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
+VOID SendAsyncCallbackInt(LPWININETAPPINFOW hIC, HINTERNET hHttpSession,
                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
                              lpvStatusInfo , DWORD dwStatusInfoLength);
 
 BOOL HTTP_InsertProxyAuthorization( LPWININETHTTPREQA lpwhr,
-                       LPCSTR username, LPCSTR password );
+                       LPCWSTR username, LPCWSTR password );
 
 BOOL NETCON_connected(WININET_NETCONNECTION *connection);
 void NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
Index: dlls/wininet/utility.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/utility.c,v
retrieving revision 1.14
diff -u -r1.14 utility.c
--- dlls/wininet/utility.c	9 Feb 2004 22:01:49 -0000	1.14
+++ dlls/wininet/utility.c	24 Mar 2004 07:20:53 -0000
@@ -212,7 +212,7 @@
     return "Unknown";
 }
 
-VOID SendAsyncCallbackInt(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
+VOID SendAsyncCallbackInt(LPWININETAPPINFOW hIC, HINTERNET hHttpSession,
                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
                              lpvStatusInfo, DWORD dwStatusInfoLength)
 {
@@ -234,7 +234,7 @@
 
 
 
-VOID SendAsyncCallback(LPWININETAPPINFOA hIC, HINTERNET hHttpSession,
+VOID SendAsyncCallback(LPWININETAPPINFOW hIC, HINTERNET hHttpSession,
                              DWORD dwContext, DWORD dwInternetStatus, LPVOID
                              lpvStatusInfo,  DWORD dwStatusInfoLength)
 {


More information about the wine-patches mailing list