Jacek Caban : shlwapi: Fixed handling mk protocol URLs in UrlCombineW.

Alexandre Julliard julliard at winehq.org
Thu Jul 10 08:58:22 CDT 2008


Module: wine
Branch: master
Commit: c086429465cbe9387349ef6835dfa4ac1b33e654
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c086429465cbe9387349ef6835dfa4ac1b33e654

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jul  9 20:02:23 2008 +0200

shlwapi: Fixed handling mk protocol URLs in UrlCombineW.

---

 dlls/shlwapi/tests/url.c |    2 ++
 dlls/shlwapi/url.c       |   42 +++++++++++++++++++++---------------------
 2 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
index 4eb581f..ede4d7c 100644
--- a/dlls/shlwapi/tests/url.c
+++ b/dlls/shlwapi/tests/url.c
@@ -234,6 +234,8 @@ static const TEST_URL_COMBINE TEST_COMBINE[] = {
     {"foo:today", "bar:calendar", 0, S_OK, "bar:calendar"},
     {"foo:/today", "foo:calendar", 0, S_OK, "foo:/calendar"},
     {"foo:/today/", "foo:calendar", 0, S_OK, "foo:/today/calendar"},
+    {"mk:@MSITStore:dir/test.chm::dir/index.html", "image.jpg", 0, S_OK, "mk:@MSITStore:dir/test.chm::dir/image.jpg"},
+    {"mk:@MSITStore:dir/test.chm::dir/dir2/index.html", "../image.jpg", 0, S_OK, "mk:@MSITStore:dir/test.chm::dir/image.jpg"}
 };
 
 /* ################ */
diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c
index 00d319d..03941a9 100644
--- a/dlls/shlwapi/url.c
+++ b/dlls/shlwapi/url.c
@@ -659,29 +659,29 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
                 base.pszSuffix += delta;
                 base.cchSuffix -= delta;
             }
-        }
-
-	/* get size of location field (if it exists) */
-	work = (LPWSTR)base.pszSuffix;
-	sizeloc = 0;
-        if (*work++ == '/') {
+        }else {
+            /* get size of location field (if it exists) */
+            work = (LPWSTR)base.pszSuffix;
+            sizeloc = 0;
             if (*work++ == '/') {
-		/* At this point have start of location and
-		 * it ends at next '/' or end of string.
-		 */
-                while(*work && (*work != '/')) work++;
-		sizeloc = (DWORD)(work - base.pszSuffix);
-	    }
-	}
+                if (*work++ == '/') {
+                    /* At this point have start of location and
+                     * it ends at next '/' or end of string.
+                     */
+                    while(*work && (*work != '/')) work++;
+                    sizeloc = (DWORD)(work - base.pszSuffix);
+                }
+            }
+        }
 
-	/* Change .sizep2 to not have the last leaf in it,
-	 * Note: we need to start after the location (if it exists)
-	 */
+        /* Change .sizep2 to not have the last leaf in it,
+         * Note: we need to start after the location (if it exists)
+         */
         work = strrchrW((base.pszSuffix+sizeloc), '/');
-	if (work) {
-	    len = (DWORD)(work - base.pszSuffix + 1);
-	    base.cchSuffix = len;
-	}
+        if (work) {
+            len = (DWORD)(work - base.pszSuffix + 1);
+            base.cchSuffix = len;
+        }
 
 	/*
 	 * At this point:
@@ -723,7 +723,7 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
 		process_case = 4;
 		break;
 	    }
-            process_case = (*base.pszSuffix == '/') ? 5 : 3;
+            process_case = (*base.pszSuffix == '/' || base.nScheme == URL_SCHEME_MK) ? 5 : 3;
 	    break;
 	}
 




More information about the wine-cvs mailing list