Jacek Caban : urlmon: Optimize get_protocol_info for urlmon protocols.

Alexandre Julliard julliard at winehq.org
Thu Feb 21 07:42:46 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Feb 21 13:08:06 2008 +0100

urlmon: Optimize get_protocol_info for urlmon protocols.

---

 dlls/urlmon/session.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index 09cd330..20be8c5 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -27,6 +27,7 @@ typedef struct name_space {
     LPWSTR protocol;
     IClassFactory *cf;
     CLSID clsid;
+    BOOL urlmon;
 
     struct name_space *next;
 } name_space;
@@ -111,6 +112,7 @@ static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR proto
         IClassFactory_AddRef(cf);
     new_name_space->cf = cf;
     new_name_space->clsid = *clsid;
+    new_name_space->urlmon = urlmon_protocol;
     new_name_space->protocol = heap_strdupW(protocol);
 
     new_name_space->next = name_space_list;
@@ -119,7 +121,7 @@ static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR proto
     return S_OK;
 }
 
-static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol, BOOL urlmon_protocol)
+static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol)
 {
     name_space *iter, *last = NULL;
 
@@ -135,7 +137,7 @@ static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol, BOOL ur
         else
             name_space_list = iter->next;
 
-        if(!urlmon_protocol)
+        if(!iter->urlmon)
             IClassFactory_Release(iter->cf);
         heap_free(iter->protocol);
         heap_free(iter);
@@ -150,7 +152,7 @@ void register_urlmon_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol
     if(do_register)
         register_namespace(cf, clsid, protocol, TRUE);
     else
-        unregister_namespace(cf, protocol, TRUE);
+        unregister_namespace(cf, protocol);
 }
 
 BOOL is_registered_protocol(LPCWSTR url)
@@ -183,6 +185,9 @@ IInternetProtocolInfo *get_protocol_info(LPCWSTR url)
 
     ns = find_name_space(schema);
     if(ns) {
+        if(ns->urlmon)
+            return NULL;
+
         hres = IClassFactory_QueryInterface(ns->cf, &IID_IInternetProtocolInfo, (void**)&ret);
         if(SUCCEEDED(hres))
             return ret;
@@ -283,7 +288,7 @@ static HRESULT WINAPI InternetSession_UnregisterNameSpace(IInternetSession *ifac
     if(!pCF || !pszProtocol)
         return E_INVALIDARG;
 
-    return unregister_namespace(pCF, pszProtocol, FALSE);
+    return unregister_namespace(pCF, pszProtocol);
 }
 
 static HRESULT WINAPI InternetSession_RegisterMimeFilter(IInternetSession *iface,




More information about the wine-cvs mailing list