Piotr Caban : urlmon: Use wine lists to store namespaces and MIME filters.
Alexandre Julliard
julliard at winehq.org
Tue Mar 13 13:50:38 CDT 2012
Module: wine
Branch: master
Commit: e804d0915a909997681a0d9cf1eba6a9308408b6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e804d0915a909997681a0d9cf1eba6a9308408b6
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Mar 13 14:09:09 2012 +0100
urlmon: Use wine lists to store namespaces and MIME filters.
---
dlls/urlmon/session.c | 82 +++++++++++++++++++-----------------------------
1 files changed, 33 insertions(+), 49 deletions(-)
diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index fc36c0b..24ed2e5 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -23,25 +23,25 @@
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
-typedef struct name_space {
+typedef struct {
LPWSTR protocol;
IClassFactory *cf;
CLSID clsid;
BOOL urlmon;
- struct name_space *next;
+ struct list entry;
} name_space;
-typedef struct mime_filter {
+typedef struct {
IClassFactory *cf;
CLSID clsid;
LPWSTR mime;
- struct mime_filter *next;
+ struct list entry;
} mime_filter;
-static name_space *name_space_list = NULL;
-static mime_filter *mime_filter_list = NULL;
+static struct list name_space_list = LIST_INIT(name_space_list);
+static struct list mime_filter_list = LIST_INIT(mime_filter_list);
static CRITICAL_SECTION session_cs;
static CRITICAL_SECTION_DEBUG session_cs_dbg =
@@ -63,7 +63,7 @@ static name_space *find_name_space(LPCWSTR protocol)
{
name_space *iter;
- for(iter = name_space_list; iter; iter = iter->next) {
+ LIST_FOR_EACH_ENTRY(iter, &name_space_list, name_space, entry) {
if(!strcmpW(iter->protocol, protocol))
return iter;
}
@@ -134,8 +134,7 @@ static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR proto
EnterCriticalSection(&session_cs);
- new_name_space->next = name_space_list;
- name_space_list = new_name_space;
+ list_add_head(&name_space_list, &new_name_space->entry);
LeaveCriticalSection(&session_cs);
@@ -144,32 +143,25 @@ static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR proto
static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol)
{
- name_space *iter, *last = NULL;
+ name_space *iter;
EnterCriticalSection(&session_cs);
- for(iter = name_space_list; iter; iter = iter->next) {
- if(iter->cf == cf && !strcmpW(iter->protocol, protocol))
- break;
- last = iter;
- }
+ LIST_FOR_EACH_ENTRY(iter, &name_space_list, name_space, entry) {
+ if(iter->cf == cf && !strcmpW(iter->protocol, protocol)) {
+ list_remove(&iter->entry);
- if(iter) {
- if(last)
- last->next = iter->next;
- else
- name_space_list = iter->next;
- }
+ LeaveCriticalSection(&session_cs);
- LeaveCriticalSection(&session_cs);
-
- if(iter) {
- if(!iter->urlmon)
- IClassFactory_Release(iter->cf);
- heap_free(iter->protocol);
- heap_free(iter);
+ if(!iter->urlmon)
+ IClassFactory_Release(iter->cf);
+ heap_free(iter->protocol);
+ heap_free(iter);
+ return S_OK;
+ }
}
+ LeaveCriticalSection(&session_cs);
return S_OK;
}
@@ -284,7 +276,7 @@ IInternetProtocol *get_mime_filter(LPCWSTR mime)
EnterCriticalSection(&session_cs);
- for(iter = mime_filter_list; iter; iter = iter->next) {
+ LIST_FOR_EACH_ENTRY(iter, &mime_filter_list, mime_filter, entry) {
if(!strcmpW(iter->mime, mime)) {
cf = iter->cf;
break;
@@ -379,8 +371,7 @@ static HRESULT WINAPI InternetSession_RegisterMimeFilter(IInternetSession *iface
EnterCriticalSection(&session_cs);
- filter->next = mime_filter_list;
- mime_filter_list = filter;
+ list_add_head(&mime_filter_list, &filter->entry);
LeaveCriticalSection(&session_cs);
@@ -390,33 +381,26 @@ static HRESULT WINAPI InternetSession_RegisterMimeFilter(IInternetSession *iface
static HRESULT WINAPI InternetSession_UnregisterMimeFilter(IInternetSession *iface,
IClassFactory *pCF, LPCWSTR pwzType)
{
- mime_filter *iter, *prev = NULL;
+ mime_filter *iter;
TRACE("(%p %s)\n", pCF, debugstr_w(pwzType));
EnterCriticalSection(&session_cs);
- for(iter = mime_filter_list; iter; iter = iter->next) {
- if(iter->cf == pCF && !strcmpW(iter->mime, pwzType))
- break;
- prev = iter;
- }
+ LIST_FOR_EACH_ENTRY(iter, &mime_filter_list, mime_filter, entry) {
+ if(iter->cf == pCF && !strcmpW(iter->mime, pwzType)) {
+ list_remove(&iter->entry);
- if(iter) {
- if(prev)
- prev->next = iter->next;
- else
- mime_filter_list = iter->next;
- }
+ LeaveCriticalSection(&session_cs);
- LeaveCriticalSection(&session_cs);
-
- if(iter) {
- IClassFactory_Release(iter->cf);
- heap_free(iter->mime);
- heap_free(iter);
+ IClassFactory_Release(iter->cf);
+ heap_free(iter->mime);
+ heap_free(iter);
+ return S_OK;
+ }
}
+ LeaveCriticalSection(&session_cs);
return S_OK;
}
More information about the wine-cvs
mailing list