Module: wine Branch: refs/heads/master Commit: e58a448c4a11c1d5058c81e1c786f10f4a80cf42 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e58a448c4a11c1d5058c81e1...
Author: Robert Shearman rob@codeweavers.com Date: Thu Mar 9 15:16:41 2006 +0000
wininet: Parse the scheme the string in InternetCreateFileW.
Parse the scheme the string in InternetCreateFileW and rewrite url_uses_default_port using schemes instead of strings.
---
dlls/wininet/internet.c | 59 +++++++++++++++++++++++++++------------------ dlls/wininet/tests/http.c | 2 -- 2 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 3255384..4a2f001 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -3685,28 +3685,19 @@ BOOL WINAPI InternetCombineUrlW(LPCWSTR #define URL_GET_COMP_LENGTHA(url, component) ((url)->dw##component##Length ? \ (url)->dw##component##Length : strlen((url)->lpsz##component))
-static BOOL url_uses_default_port(LPURL_COMPONENTSW lpUrlComponents) +static BOOL url_uses_default_port(INTERNET_SCHEME nScheme, INTERNET_PORT nPort) { - static const WCHAR httpW[] = {'h','t','t','p',0}; - static const WCHAR httpsW[] = {'h','t','t','p','s',0}; - static const WCHAR ftpW[] = {'f','t','p',0}; - static const WCHAR gopherW[] = {'g','o','p','h','e','r',0}; - DWORD len; - - if (!lpUrlComponents->lpszScheme) return FALSE; - - len = URL_GET_COMP_LENGTH(lpUrlComponents, Scheme); - if (!strncmpW(lpUrlComponents->lpszScheme, httpW, len) && - (lpUrlComponents->nPort == INTERNET_DEFAULT_HTTP_PORT)) + if ((nScheme == INTERNET_SCHEME_HTTP) && + (nPort == INTERNET_DEFAULT_HTTP_PORT)) return TRUE; - if (!strncmpW(lpUrlComponents->lpszScheme, httpsW, len) && - (lpUrlComponents->nPort == INTERNET_DEFAULT_HTTPS_PORT)) + if ((nScheme == INTERNET_SCHEME_HTTPS) && + (nPort == INTERNET_DEFAULT_HTTPS_PORT)) return TRUE; - if (!strncmpW(lpUrlComponents->lpszScheme, ftpW, len) && - (lpUrlComponents->nPort == INTERNET_DEFAULT_FTP_PORT)) + if ((nScheme == INTERNET_SCHEME_FTP) && + (nPort == INTERNET_DEFAULT_FTP_PORT)) return TRUE; - if (!strncmpW(lpUrlComponents->lpszScheme, gopherW, len) && - (lpUrlComponents->nPort == INTERNET_DEFAULT_GOPHER_PORT)) + if ((nScheme == INTERNET_SCHEME_GOPHER) && + (nPort == INTERNET_DEFAULT_GOPHER_PORT)) return TRUE;
return FALSE; @@ -3729,14 +3720,25 @@ static LPCWSTR INTERNET_GetSchemeString( static BOOL calc_url_length(LPURL_COMPONENTSW lpUrlComponents, LPDWORD lpdwUrlLength) { + INTERNET_SCHEME nScheme; + *lpdwUrlLength = 0;
if (lpUrlComponents->lpszScheme) - *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, Scheme); + { + DWORD dwLen = URL_GET_COMP_LENGTH(lpUrlComponents, Scheme); + *lpdwUrlLength += dwLen; + nScheme = GetInternetSchemeW(lpUrlComponents->lpszScheme, dwLen); + } else { - LPCWSTR scheme = INTERNET_GetSchemeString(lpUrlComponents->nScheme); - TRACE("got scheme %s\n", debugstr_w(scheme)); + LPCWSTR scheme; + + nScheme = lpUrlComponents->nScheme; + + if (nScheme == INTERNET_SCHEME_DEFAULT) + nScheme = INTERNET_SCHEME_HTTP; + scheme = INTERNET_GetSchemeString(nScheme); *lpdwUrlLength += strlenW(scheme); }
@@ -3765,7 +3767,7 @@ static BOOL calc_url_length(LPURL_COMPON if (lpUrlComponents->lpszHostName) *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, HostName);
- if (!url_uses_default_port(lpUrlComponents)) + if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) { char szPort[MAX_WORD_DIGITS];
@@ -3905,6 +3907,7 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM LPWSTR lpszUrl, LPDWORD lpdwUrlLength) { DWORD dwLen; + INTERNET_SCHEME nScheme;
static const WCHAR colonSlashW[] = {':','/','/'}; static const WCHAR percentD[] = {'%','d',0}; @@ -3940,10 +3943,18 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM dwLen = URL_GET_COMP_LENGTH(lpUrlComponents, Scheme); memcpy(lpszUrl, lpUrlComponents->lpszScheme, dwLen * sizeof(WCHAR)); lpszUrl += dwLen; + + nScheme = GetInternetSchemeW(lpUrlComponents->lpszScheme, dwLen); } else { - LPCWSTR scheme = INTERNET_GetSchemeString(lpUrlComponents->nScheme); + LPCWSTR scheme; + nScheme = lpUrlComponents->nScheme; + + if (nScheme == INTERNET_SCHEME_DEFAULT) + nScheme = INTERNET_SCHEME_HTTP; + + scheme = INTERNET_GetSchemeString(nScheme); dwLen = strlenW(scheme); memcpy(lpszUrl, scheme, dwLen * sizeof(WCHAR)); lpszUrl += dwLen; @@ -3979,7 +3990,7 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM lpszUrl += dwLen; }
- if (!url_uses_default_port(lpUrlComponents)) + if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) { WCHAR szPort[MAX_WORD_DIGITS];
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index 92f4c60..72ab72c 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -917,13 +917,11 @@ static void InternetCreateUrlA_test(void SetLastError(0xdeadbeef); urlComp.lpszScheme = NULL; ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len); - todo_wine { ok(ret, "Expected success\n"); ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %ld\n", GetLastError()); ok(len == 50, "Expected len 50, got %ld\n", len); ok(!strcmp(szUrl, CREATE_URL1), "Expected %s, got %s\n", CREATE_URL1, szUrl); - }
/* alloced szUrl, invalid nScheme * any nScheme out of range seems ignored