Jacek Caban : mshtml: Make nsIURI::Resolve implementation IUri-based.

Alexandre Julliard julliard at winehq.org
Tue Jan 4 09:47:26 CST 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jan  3 23:48:29 2011 +0100

mshtml: Make nsIURI::Resolve implementation IUri-based.

---

 dlls/mshtml/nsio.c |   31 +++++++++++++++++++------------
 1 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index e5cfa78..1a8c4fd 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -2048,36 +2048,43 @@ static nsresult NSAPI nsURI_Resolve(nsIURL *iface, const nsACString *aRelativePa
         nsACString *_retval)
 {
     nsWineURI *This = NSURI_THIS(iface);
-    WCHAR url[INTERNET_MAX_URL_LENGTH];
     const char *patha;
+    IUri *new_uri;
     WCHAR *path;
-    char *urla;
-    DWORD len;
+    char *reta;
+    BSTR ret;
     HRESULT hres;
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_nsacstr(aRelativePath), _retval);
 
+    if(!ensure_uri(This))
+        return NS_ERROR_UNEXPECTED;
+
     nsACString_GetData(aRelativePath, &patha);
     path = heap_strdupAtoW(patha);
     if(!path)
         return NS_ERROR_OUT_OF_MEMORY;
 
-    hres = CoInternetCombineUrl(This->wine_url, path,
-                                URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO,
-                                url, sizeof(url)/sizeof(WCHAR), &len, 0);
+    hres = CoInternetCombineUrlEx(This->uri, path, URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO, &new_uri, 0);
     heap_free(path);
     if(FAILED(hres)) {
-        ERR("CoIntenetCombineUrl failed: %08x\n", hres);
+        ERR("CoIntenetCombineUrlEx failed: %08x\n", hres);
         return NS_ERROR_FAILURE;
     }
 
-    urla = heap_strdupWtoA(url);
-    if(!urla)
+    hres = IUri_GetDisplayUri(new_uri, &ret);
+    IUri_Release(new_uri);
+    if(FAILED(hres))
+        return NS_ERROR_FAILURE;
+
+    reta = heap_strdupWtoA(ret);
+    SysFreeString(ret);
+    if(!reta)
         return NS_ERROR_OUT_OF_MEMORY;
 
-    TRACE("returning %s\n", debugstr_a(urla));
-    nsACString_SetData(_retval, urla);
-    heap_free(urla);
+    TRACE("returning %s\n", debugstr_a(reta));
+    nsACString_SetData(_retval, reta);
+    heap_free(reta);
     return NS_OK;
 }
 




More information about the wine-cvs mailing list