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