Jacek Caban : urlmon: Return IClassFactory in get_protocol_handler and fix get_protocol.
Module: wine Branch: refs/heads/master Commit: 21621b285683059bbab63defc7f45767c4ca3c55 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=21621b285683059bbab63def... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sat May 27 22:55:32 2006 +0200 urlmon: Return IClassFactory in get_protocol_handler and fix get_protocol. --- dlls/urlmon/binding.c | 8 +------- dlls/urlmon/session.c | 16 +++++++++++----- dlls/urlmon/urlmon_main.h | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index 44d3e39..37f2752 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -929,7 +929,6 @@ static HRESULT get_callback(IBindCtx *pb static HRESULT get_protocol(Binding *This, LPCWSTR url) { - IUnknown *unk = NULL; IClassFactory *cf = NULL; HRESULT hres; @@ -945,12 +944,7 @@ static HRESULT get_protocol(Binding *Thi return S_OK; } - hres = get_protocol_handler(url, &unk); - if(FAILED(hres)) - return hres; - - hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&cf); - IUnknown_Release(unk); + hres = get_protocol_handler(url, &cf); if(FAILED(hres)) return hres; diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c index deb7146..af07afc 100644 --- a/dlls/urlmon/session.c +++ b/dlls/urlmon/session.c @@ -130,9 +130,10 @@ IInternetProtocolInfo *get_protocol_info return ret; } -HRESULT get_protocol_handler(LPCWSTR url, IUnknown **ret) +HRESULT get_protocol_handler(LPCWSTR url, IClassFactory **ret) { IClassFactory *cf; + IUnknown *unk; WCHAR schema[64]; DWORD schema_len; HRESULT hres; @@ -144,12 +145,17 @@ HRESULT get_protocol_handler(LPCWSTR url cf = find_name_space(schema); if(cf) { - hres = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)ret); - if(SUCCEEDED(hres)) - return hres; + *ret = cf; + return S_OK; } - return get_protocol_iface(schema, schema_len, ret); + hres = get_protocol_iface(schema, schema_len, &unk); + if(FAILED(hres)) + return hres; + + hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)ret); + IUnknown_Release(unk); + return hres; } static HRESULT WINAPI InternetSession_QueryInterface(IInternetSession *iface, diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h index 9b9f149..240fdfe 100644 --- a/dlls/urlmon/urlmon_main.h +++ b/dlls/urlmon/urlmon_main.h @@ -55,7 +55,7 @@ HRESULT UMCreateStreamOnCacheFile(LPCWST void UMCloseCacheFileStream(IUMCacheStream *pstr); IInternetProtocolInfo *get_protocol_info(LPCWSTR url); -HRESULT get_protocol_handler(LPCWSTR url, IUnknown **ret); +HRESULT get_protocol_handler(LPCWSTR url, IClassFactory **ret); HRESULT start_binding(LPCWSTR url, IBindCtx *pbc, REFIID riid, void **ppv);
participants (1)
-
Alexandre Julliard