Robert Shearman : wininet: Further InternetCreateFileW fixes.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 9 16:06:15 CST 2006
Module: wine
Branch: refs/heads/master
Commit: b0fcaf9d48fdc6fbc98fbaab5a8b833a7eae021e
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b0fcaf9d48fdc6fbc98fbaab5a8b833a7eae021e
Author: Robert Shearman <rob at 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:[email protected]/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);
}
More information about the wine-cvs
mailing list