Jacek Caban : urlmon:
Check if protocol object implements IInternetProtocolInfo interface.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Feb 23 05:28:15 CST 2007
Module: wine
Branch: master
Commit: d31969b5e61f6deb1387a29e01b79b4d6f24e755
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d31969b5e61f6deb1387a29e01b79b4d6f24e755
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Feb 22 21:13:01 2007 +0100
urlmon: Check if protocol object implements IInternetProtocolInfo interface.
---
dlls/urlmon/session.c | 23 +++++++++--------------
1 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index f66b22e..6e80996 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -55,7 +55,7 @@ static name_space *find_name_space(LPCWSTR protocol)
return NULL;
}
-static HRESULT get_protocol_iface(LPCWSTR schema, DWORD schema_len, CLSID *pclsid, IUnknown **ret)
+static HRESULT get_protocol_cf(LPCWSTR schema, DWORD schema_len, CLSID *pclsid, IClassFactory **ret)
{
WCHAR str_clsid[64];
HKEY hkey = NULL;
@@ -96,14 +96,14 @@ static HRESULT get_protocol_iface(LPCWSTR schema, DWORD schema_len, CLSID *pclsi
if(pclsid)
*pclsid = clsid;
- return CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)ret);
+ return CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void**)ret);
}
IInternetProtocolInfo *get_protocol_info(LPCWSTR url)
{
IInternetProtocolInfo *ret = NULL;
+ IClassFactory *cf;
name_space *ns;
- IUnknown *unk;
WCHAR schema[64];
DWORD schema_len;
HRESULT hres;
@@ -124,19 +124,20 @@ IInternetProtocolInfo *get_protocol_info(LPCWSTR url)
return ret;
}
- hres = get_protocol_iface(schema, schema_len, NULL, &unk);
+ hres = get_protocol_cf(schema, schema_len, NULL, &cf);
if(FAILED(hres))
return NULL;
- hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&ret);
- IUnknown_Release(unk);
+ hres = IClassFactory_QueryInterface(cf, &IID_IInternetProtocolInfo, (void**)&ret);
+ if(FAILED(hres))
+ IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocolInfo, (void**)&ret);
+ IClassFactory_Release(cf);
return ret;
}
HRESULT get_protocol_handler(LPCWSTR url, CLSID *clsid, IClassFactory **ret)
{
- IUnknown *unk;
name_space *ns;
WCHAR schema[64];
DWORD schema_len;
@@ -155,13 +156,7 @@ HRESULT get_protocol_handler(LPCWSTR url, CLSID *clsid, IClassFactory **ret)
return S_OK;
}
- hres = get_protocol_iface(schema, schema_len, clsid, &unk);
- if(FAILED(hres))
- return hres;
-
- hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)ret);
- IUnknown_Release(unk);
- return hres;
+ return get_protocol_cf(schema, schema_len, clsid, ret);
}
static HRESULT WINAPI InternetSession_QueryInterface(IInternetSession *iface,
More information about the wine-cvs
mailing list