Jacek Caban : mshtml: Make sure we always create nsWineURI with valid IUri.

Alexandre Julliard julliard at winehq.org
Mon Jun 27 17:41:18 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Jun 25 19:03:19 2011 +0200

mshtml: Make sure we always create nsWineURI with valid IUri.

---

 dlls/mshtml/nsio.c |   41 +++++++++++++++++++++++++----------------
 1 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index b47a643..3222522 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -95,7 +95,7 @@ static BOOL ensure_uri(nsWineURI *This)
     return TRUE;
 }
 
-static nsresult create_uri(nsIURI*,HTMLWindow*,NSContainer*,nsWineURI**);
+static nsresult create_nsuri(IUri*,nsIURI*,HTMLWindow*,NSContainer*,nsWineURI**);
 
 static const char *debugstr_nsacstr(const nsACString *nsstr)
 {
@@ -2111,14 +2111,12 @@ static nsresult NSAPI nsURI_Clone(nsIURL *iface, nsIURI **_retval)
         }
     }
 
-    nsres = create_uri(nsuri, This->window_ref ? This->window_ref->window : NULL, This->container, &wine_uri);
+    nsres = create_nsuri(This->uri, nsuri, This->window_ref ? This->window_ref->window : NULL, This->container, &wine_uri);
     if(NS_FAILED(nsres)) {
-        WARN("create_uri failed: %08x\n", nsres);
+        WARN("create_nsuri failed: %08x\n", nsres);
         return nsres;
     }
 
-    wine_uri->uri = This->uri;
-    IUri_AddRef(wine_uri->uri);
     sync_wine_url(wine_uri);
 
     *_retval = (nsIURI*)&wine_uri->nsIURL_iface;
@@ -2515,7 +2513,7 @@ static const nsIURLVtbl nsURLVtbl = {
     nsURL_GetRelativeSpec
 };
 
-static nsresult create_uri(nsIURI *nsuri, HTMLWindow *window, NSContainer *container, nsWineURI **_retval)
+static nsresult create_nsuri(IUri *iuri, nsIURI *nsuri, HTMLWindow *window, NSContainer *container, nsWineURI **_retval)
 {
     nsWineURI *ret = heap_alloc_zero(sizeof(nsWineURI));
 
@@ -2526,6 +2524,9 @@ static nsresult create_uri(nsIURI *nsuri, HTMLWindow *window, NSContainer *conta
     set_uri_nscontainer(ret, container);
     set_uri_window(ret, window);
 
+    IUri_AddRef(iuri);
+    ret->uri = iuri;
+
     if(nsuri)
         nsIURI_QueryInterface(nsuri, &IID_nsIURL, (void**)&ret->nsurl);
 
@@ -2537,9 +2538,16 @@ static nsresult create_uri(nsIURI *nsuri, HTMLWindow *window, NSContainer *conta
 HRESULT create_doc_uri(HTMLWindow *window, WCHAR *url, nsWineURI **ret)
 {
     nsWineURI *uri;
+    IUri *iuri;
     nsresult nsres;
+    HRESULT hres;
+
+    hres = CreateUri(url, 0, 0, &iuri);
+    if(FAILED(hres))
+        return hres;
 
-    nsres = create_uri(NULL, window, window->doc_obj->nscontainer, &uri);
+    nsres = create_nsuri(iuri, NULL, window, window->doc_obj->nscontainer, &uri);
+    IUri_Release(iuri);
     if(NS_FAILED(nsres))
         return E_FAIL;
 
@@ -2586,22 +2594,24 @@ HRESULT create_redirect_nschannel(const WCHAR *url, nsChannel *orig_channel, nsC
     HTMLWindow *window = NULL;
     nsChannel *channel;
     nsWineURI *uri;
+    IUri *iuri;
     nsresult nsres;
     HRESULT hres;
 
+    hres = CreateUri(url, 0, 0, &iuri);
+    if(FAILED(hres))
+        return hres;
+
     if(orig_channel->uri->window_ref)
         window = orig_channel->uri->window_ref->window;
-    nsres = create_uri(NULL, window, NULL, &uri);
+    nsres = create_nsuri(iuri, NULL, window, NULL, &uri);
+    IUri_Release(iuri);
     if(NS_FAILED(nsres))
         return E_FAIL;
 
-    hres = CreateUri(url, 0, 0, &uri->uri);
-    if(SUCCEEDED(hres))
-        nsres = create_nschannel(uri, &channel);
     sync_wine_url(uri);
+    nsres = create_nschannel(uri, &channel);
     nsIURL_Release(&uri->nsIURL_iface);
-    if(FAILED(hres))
-        return hres;
     if(NS_FAILED(nsres))
         return E_FAIL;
 
@@ -2918,14 +2928,13 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
         return nsres;
     }
 
-    nsres = create_uri(uri, window, NULL, &wine_uri);
+    nsres = create_nsuri(urlmon_uri, uri, window, NULL, &wine_uri);
+    IUri_Release(urlmon_uri);
     if(base_wine_uri)
         nsIURI_Release(&base_wine_uri->nsIURL_iface);
     if(NS_FAILED(nsres))
         return nsres;
 
-    wine_uri->uri = urlmon_uri;
-
     sync_wine_url(wine_uri);
     *_retval = (nsIURI*)wine_uri;
     return nsres;




More information about the wine-cvs mailing list