Module: wine Branch: refs/heads/master Commit: b0fcaf9d48fdc6fbc98fbaab5a8b833a7eae021e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b0fcaf9d48fdc6fbc98fbaab...
Author: Robert Shearman rob@codeweavers.com Date: Thu Mar 9 15:19:15 2006 +0000
wininet: Further InternetCreateFileW fixes.
- Add the slash after the port number. - Only add the port number if the host name is present.
---
dlls/wininet/internet.c | 49 ++++++++++++++++++++++++++------------------- dlls/wininet/tests/http.c | 19 ++++++++++++++++- 2 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 5930ea5..e06c306 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -3783,20 +3783,23 @@ static BOOL calc_url_length(LPURL_COMPON if (lpUrlComponents->lpszHostName) { *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, HostName); + + if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) + { + char szPort[MAX_WORD_DIGITS]; + + sprintf(szPort, "%d", lpUrlComponents->nPort); + *lpdwUrlLength += strlen(szPort); + *lpdwUrlLength += strlen(":"); + } + if (lpUrlComponents->lpszUrlPath && *lpUrlComponents->lpszUrlPath != '/') (*lpdwUrlLength)++; /* '/' */ }
- if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) - { - char szPort[MAX_WORD_DIGITS]; - - sprintf(szPort, "%d", lpUrlComponents->nPort); - *lpdwUrlLength += strlen(szPort); - *lpdwUrlLength += strlen(":"); - } + if (lpUrlComponents->lpszUrlPath) + *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath);
- *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); return TRUE; }
@@ -4016,6 +4019,18 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM memcpy(lpszUrl, lpUrlComponents->lpszHostName, dwLen * sizeof(WCHAR)); lpszUrl += dwLen;
+ if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) + { + WCHAR szPort[MAX_WORD_DIGITS]; + + sprintfW(szPort, percentD, lpUrlComponents->nPort); + *lpszUrl = ':'; + lpszUrl++; + dwLen = strlenW(szPort); + memcpy(lpszUrl, szPort, dwLen * sizeof(WCHAR)); + lpszUrl += dwLen; + } + /* add slash between hostname and path if necessary */ if (lpUrlComponents->lpszUrlPath && *lpUrlComponents->lpszUrlPath != '/') { @@ -4024,22 +4039,14 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM } }
- if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) - { - WCHAR szPort[MAX_WORD_DIGITS];
- sprintfW(szPort, percentD, lpUrlComponents->nPort); - *lpszUrl = ':'; - lpszUrl++; - dwLen = strlenW(szPort); - memcpy(lpszUrl, szPort, dwLen * sizeof(WCHAR)); + if (lpUrlComponents->lpszUrlPath) + { + dwLen = URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); + memcpy(lpszUrl, lpUrlComponents->lpszUrlPath, dwLen * sizeof(WCHAR)); lpszUrl += dwLen; }
- dwLen = URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); - memcpy(lpszUrl, lpUrlComponents->lpszUrlPath, dwLen * sizeof(WCHAR)); - lpszUrl += dwLen; - *lpszUrl = '\0';
return TRUE; diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index a4b66eb..a202268 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -49,6 +49,7 @@ #define CREATE_URL8 "https://username:password@www.winehq.org/site/about" #define CREATE_URL9 "about:blank" #define CREATE_URL10 "about://host/blank" +#define CREATE_URL11 "about:"
static HANDLE hCompleteEvent;
@@ -1129,8 +1130,22 @@ static void InternetCreateUrlA_test(void szUrl = (char *)HeapAlloc(GetProcessHeap(), 0, ++len); ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len); ok(ret, "Expected success\n"); - ok(len == strlen(CREATE_URL10), "Expected len %d, got %ld\n", strlen(CREATE_URL9), len); - ok(!strcmp(szUrl, CREATE_URL10), "Expected %s, got %s\n", CREATE_URL9, szUrl); + ok(len == strlen(CREATE_URL10), "Expected len %d, got %ld\n", strlen(CREATE_URL10), len); + ok(!strcmp(szUrl, CREATE_URL10), "Expected %s, got %s\n", CREATE_URL10, szUrl); + + HeapFree(GetProcessHeap(), 0, szUrl); + + memset(&urlComp, 0, sizeof(urlComp)); + urlComp.dwStructSize = sizeof(URL_COMPONENTS); + urlComp.nPort = 8080; + urlComp.lpszScheme = "about"; + len = strlen(CREATE_URL11); + len++; /* work around bug in native wininet */ + szUrl = (char *)HeapAlloc(GetProcessHeap(), 0, ++len); + ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len); + ok(ret, "Expected success\n"); + ok(len == strlen(CREATE_URL11), "Expected len %d, got %ld\n", strlen(CREATE_URL11), len); + ok(!strcmp(szUrl, CREATE_URL11), "Expected %s, got %s\n", CREATE_URL11, szUrl);
HeapFree(GetProcessHeap(), 0, szUrl); }