Jacek Caban : urlmon: Added [Un]RegisterNamespace implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 25 04:15:58 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 9fb647ef006512530c58007dbbe63b525487f05b
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9fb647ef006512530c58007dbbe63b525487f05b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed May 24 17:59:07 2006 +0200
urlmon: Added [Un]RegisterNamespace implementation.
---
dlls/urlmon/session.c | 67 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 62 insertions(+), 5 deletions(-)
diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index 4cc38a1..4a1a9b3 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -29,9 +29,19 @@ #include "urlmon.h"
#include "urlmon_main.h"
#include "wine/debug.h"
+#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+typedef struct name_space {
+ LPWSTR protocol;
+ IClassFactory *cf;
+
+ struct name_space *next;
+} name_space;
+
+static name_space *name_space_list = NULL;
+
HRESULT get_protocol_iface(LPCWSTR url, IUnknown **ret)
{
WCHAR schema[64], str_clsid[64];
@@ -111,16 +121,63 @@ static HRESULT WINAPI InternetSession_Re
IClassFactory *pCF, REFCLSID rclsid, LPCWSTR pwzProtocol, ULONG cPatterns,
const LPCWSTR *ppwzPatterns, DWORD dwReserved)
{
- FIXME("(%p %s %s %ld %p %ld)\n", pCF, debugstr_guid(rclsid), debugstr_w(pwzProtocol),
- cPatterns, ppwzPatterns, dwReserved);
- return E_NOTIMPL;
+ name_space *new_name_space;
+ int size;
+
+ TRACE("(%p %s %s %ld %p %ld)\n", pCF, debugstr_guid(rclsid), debugstr_w(pwzProtocol),
+ cPatterns, ppwzPatterns, dwReserved);
+
+ if(cPatterns || ppwzPatterns)
+ FIXME("patterns not supported\n");
+ if(dwReserved)
+ WARN("dwReserved = %ld\n", dwReserved);
+
+ if(!pCF || !pwzProtocol)
+ return E_INVALIDARG;
+
+ new_name_space = HeapAlloc(GetProcessHeap(), 0, sizeof(name_space));
+
+ size = (strlenW(pwzProtocol)+1)*sizeof(WCHAR);
+ new_name_space->protocol = HeapAlloc(GetProcessHeap(), 0, size);
+ memcpy(new_name_space->protocol, pwzProtocol, size);
+
+ IClassFactory_AddRef(pCF);
+ new_name_space->cf = pCF;
+
+ new_name_space->next = name_space_list;
+ name_space_list = new_name_space;
+ return S_OK;
}
static HRESULT WINAPI InternetSession_UnregisterNameSpace(IInternetSession *iface,
IClassFactory *pCF, LPCWSTR pszProtocol)
{
- FIXME("(%p %s)\n", pCF, debugstr_w(pszProtocol));
- return E_NOTIMPL;
+ name_space *iter, *last = NULL;
+
+ TRACE("(%p %s)\n", pCF, debugstr_w(pszProtocol));
+
+ if(!pCF || !pszProtocol)
+ return E_INVALIDARG;
+
+ for(iter = name_space_list; iter; iter = iter->next) {
+ if(iter->cf == pCF && !strcmpW(iter->protocol, pszProtocol))
+ break;
+ last = iter;
+ }
+
+ if(!iter)
+ return S_OK;
+
+ if(last)
+ last->next = iter->next;
+ else
+ name_space_list = iter->next;
+
+ IClassFactory_Release(iter->cf);
+ HeapFree(GetProcessHeap(), 0, iter->protocol);
+ HeapFree(GetProcessHeap(), 0, iter);
+
+ return S_OK;
}
static HRESULT WINAPI InternetSession_RegisterMimeFilter(IInternetSession *iface,
More information about the wine-cvs
mailing list