Piotr Caban : urlmon: Added CoInternetGetSecurityUrl implementation.
Alexandre Julliard
julliard at winehq.org
Wed Dec 16 09:41:38 CST 2009
Module: wine
Branch: master
Commit: 73c3160674ef454711613486b79c831251e05e18
URL: http://source.winehq.org/git/wine.git/?a=commit;h=73c3160674ef454711613486b79c831251e05e18
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Dec 15 23:48:23 2009 +0100
urlmon: Added CoInternetGetSecurityUrl implementation.
---
dlls/urlmon/sec_mgr.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++-
include/urlmon.idl | 1 +
2 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/dlls/urlmon/sec_mgr.c b/dlls/urlmon/sec_mgr.c
index 968a987..c242274 100644
--- a/dlls/urlmon/sec_mgr.c
+++ b/dlls/urlmon/sec_mgr.c
@@ -1234,6 +1234,64 @@ HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider* pSP, IInternetZoneM
*/
HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved)
{
- FIXME("(%p,%p,%u,%u): stub\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved);
- return E_NOTIMPL;
+ WCHAR url[INTERNET_MAX_URL_LENGTH], domain[INTERNET_MAX_URL_LENGTH];
+ DWORD len;
+ HRESULT hres;
+
+ TRACE("(%p,%p,%u,%u)\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved);
+
+ hres = CoInternetParseUrl(pwzUrl, PARSE_SECURITY_URL, 0, url, INTERNET_MAX_URL_LENGTH, &len, 0);
+ if(hres==S_OK) {
+ if(psuAction == PSU_DEFAULT)
+ hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, domain,
+ INTERNET_MAX_URL_LENGTH, &len, 0);
+
+ if(psuAction==PSU_SECURITY_URL_ONLY || hres!=S_OK) {
+ len = lstrlenW(url)+1;
+ *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+ if(!*ppwzSecUrl)
+ return E_OUTOFMEMORY;
+
+ memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR));
+ return S_OK;
+ }
+
+ len++;
+ *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+ if(!*ppwzSecUrl)
+ return E_OUTOFMEMORY;
+
+ memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
+ return S_OK;
+ }
+
+ if(psuAction == PSU_DEFAULT) {
+ hres = CoInternetParseUrl(pwzUrl, PARSE_ROOTDOCUMENT, 0, url, 0, &len, 0);
+ if(hres == S_FALSE) {
+ hres = CoInternetParseUrl(pwzUrl, PARSE_SCHEMA, 0, domain,
+ INTERNET_MAX_URL_LENGTH, &len, 0);
+ if(hres == S_OK) {
+ domain[len] = ':';
+ hres = CoInternetParseUrl(pwzUrl, PARSE_DOMAIN, 0, domain+len+1,
+ INTERNET_MAX_URL_LENGTH-len-1, &len, 0);
+ if(hres == S_OK) {
+ len = lstrlenW(domain)+1;
+ *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+ if(!*ppwzSecUrl)
+ return E_OUTOFMEMORY;
+
+ memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
+ return S_OK;
+ }
+ }
+ }
+ }
+
+ len = lstrlenW(pwzUrl)+1;
+ *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+ if(!*ppwzSecUrl)
+ return E_OUTOFMEMORY;
+
+ memcpy(*ppwzSecUrl, pwzUrl, len*sizeof(WCHAR));
+ return S_OK;
}
diff --git a/include/urlmon.idl b/include/urlmon.idl
index 78afd16..828cbd2 100644
--- a/include/urlmon.idl
+++ b/include/urlmon.idl
@@ -1758,6 +1758,7 @@ cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IIntern
cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
+cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);")
cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
More information about the wine-cvs
mailing list