Jacek Caban : crypt32: Store list entry directly in context_t.
Alexandre Julliard
julliard at winehq.org
Tue Oct 15 13:27:13 CDT 2013
Module: wine
Branch: master
Commit: 06f5ee4b2cc7fca44dd32bc1b6d5db1dd11b92f9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=06f5ee4b2cc7fca44dd32bc1b6d5db1dd11b92f9
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Oct 15 16:53:11 2013 +0200
crypt32: Store list entry directly in context_t.
---
dlls/crypt32/collectionstore.c | 1 -
dlls/crypt32/context.c | 65 ++++++++++++---------------------------
dlls/crypt32/crl.c | 2 +-
dlls/crypt32/crypt32_private.h | 5 +++
dlls/crypt32/provstore.c | 1 -
dlls/crypt32/regstore.c | 1 -
dlls/crypt32/store.c | 1 -
7 files changed, 26 insertions(+), 50 deletions(-)
diff --git a/dlls/crypt32/collectionstore.c b/dlls/crypt32/collectionstore.c
index dbcf21b..284519f 100644
--- a/dlls/crypt32/collectionstore.c
+++ b/dlls/crypt32/collectionstore.c
@@ -20,7 +20,6 @@
#include "winbase.h"
#include "wincrypt.h"
#include "wine/debug.h"
-#include "wine/list.h"
#include "crypt32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c
index b2b2282..527eb79 100644
--- a/dlls/crypt32/context.c
+++ b/dlls/crypt32/context.c
@@ -21,7 +21,6 @@
#include "winbase.h"
#include "wincrypt.h"
#include "wine/debug.h"
-#include "wine/list.h"
#include "crypt32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(context);
@@ -163,50 +162,30 @@ struct ContextList *ContextList_Create(
return list;
}
-static inline struct list *ContextList_ContextToEntry(const struct ContextList *list,
- const void *context)
-{
- struct list *ret;
-
- if (context)
- ret = Context_GetExtra(context, list->contextSize);
- else
- ret = NULL;
- return ret;
-}
-
-static inline void *ContextList_EntryToContext(const struct ContextList *list,
- struct list *entry)
-{
- return (LPBYTE)entry - list->contextSize;
-}
-
void *ContextList_Add(struct ContextList *list, void *toLink, void *toReplace)
{
context_t *context;
TRACE("(%p, %p, %p)\n", list, toLink, toReplace);
- context = Context_CreateLinkContext(list->contextSize, context_from_ptr(toLink), sizeof(struct list));
+ context = Context_CreateLinkContext(list->contextSize, context_from_ptr(toLink), 0);
if (context)
{
- struct list *entry = ContextList_ContextToEntry(list, CONTEXT_FROM_BASE_CONTEXT(context));
-
TRACE("adding %p\n", context);
EnterCriticalSection(&list->cs);
if (toReplace)
{
- struct list *existing = ContextList_ContextToEntry(list, toReplace);
+ context_t *existing = context_from_ptr(toReplace);
- entry->prev = existing->prev;
- entry->next = existing->next;
- entry->prev->next = entry;
- entry->next->prev = entry;
- existing->prev = existing->next = existing;
+ context->u.entry.prev = existing->u.entry.prev;
+ context->u.entry.next = existing->u.entry.next;
+ context->u.entry.prev->next = &context->u.entry;
+ context->u.entry.next->prev = &context->u.entry;
+ list_init(&existing->u.entry);
Context_Release(context_from_ptr(toReplace));
}
else
- list_add_head(&list->contexts, entry);
+ list_add_head(&list->contexts, &context->u.entry);
LeaveCriticalSection(&list->cs);
}
return CONTEXT_FROM_BASE_CONTEXT(context);
@@ -220,9 +199,7 @@ void *ContextList_Enum(struct ContextList *list, void *pPrev)
EnterCriticalSection(&list->cs);
if (pPrev)
{
- struct list *prevEntry = ContextList_ContextToEntry(list, pPrev);
-
- listNext = list_next(&list->contexts, prevEntry);
+ listNext = list_next(&list->contexts, &context_from_ptr(pPrev)->u.entry);
Context_Release(context_from_ptr(pPrev));
}
else
@@ -231,7 +208,7 @@ void *ContextList_Enum(struct ContextList *list, void *pPrev)
if (listNext)
{
- ret = ContextList_EntryToContext(list, listNext);
+ ret = CONTEXT_FROM_BASE_CONTEXT(LIST_ENTRY(listNext, context_t, u.entry));
Context_AddRef(context_from_ptr(ret));
}
else
@@ -239,35 +216,33 @@ void *ContextList_Enum(struct ContextList *list, void *pPrev)
return ret;
}
-BOOL ContextList_Remove(struct ContextList *list, void *context)
+BOOL ContextList_Remove(struct ContextList *list, void *ctx)
{
- struct list *entry = ContextList_ContextToEntry(list, context);
+ context_t *context = context_from_ptr(ctx);
BOOL inList = FALSE;
EnterCriticalSection(&list->cs);
- if (!list_empty(entry))
+ if (!list_empty(&context->u.entry))
{
- list_remove(entry);
+ list_remove(&context->u.entry);
+ list_init(&context->u.entry);
inList = TRUE;
}
LeaveCriticalSection(&list->cs);
- if (inList)
- list_init(entry);
+
return inList;
}
static void ContextList_Empty(struct ContextList *list)
{
- struct list *entry, *next;
+ context_t *context, *next;
EnterCriticalSection(&list->cs);
- LIST_FOR_EACH_SAFE(entry, next, &list->contexts)
+ LIST_FOR_EACH_ENTRY_SAFE(context, next, &list->contexts, context_t, u.entry)
{
- const void *context = ContextList_EntryToContext(list, entry);
-
TRACE("removing %p\n", context);
- list_remove(entry);
- Context_Release(context_from_ptr(context));
+ list_remove(&context->u.entry);
+ Context_Release(context);
}
LeaveCriticalSection(&list->cs);
}
diff --git a/dlls/crypt32/crl.c b/dlls/crypt32/crl.c
index 9ecc23f..2e3a58f 100644
--- a/dlls/crypt32/crl.c
+++ b/dlls/crypt32/crl.c
@@ -343,7 +343,7 @@ PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext)
return pCrlContext;
}
-BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext)
+BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
{
BOOL ret = TRUE;
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index 287e0c2..20ba276 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -19,6 +19,8 @@
#ifndef __CRYPT32_PRIVATE_H__
#define __CRYPT32_PRIVATE_H__
+#include "wine/list.h"
+
/* a few asn.1 tags we need */
#define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01)
#define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
@@ -170,6 +172,9 @@ typedef struct _context_t {
LONG ref;
struct _context_t *linked;
CONTEXT_PROPERTY_LIST *properties;
+ union {
+ struct list entry;
+ } u;
} BASE_CONTEXT;
static inline context_t *context_from_ptr(const void *ptr)
diff --git a/dlls/crypt32/provstore.c b/dlls/crypt32/provstore.c
index 97b5454..ce9c145 100644
--- a/dlls/crypt32/provstore.c
+++ b/dlls/crypt32/provstore.c
@@ -20,7 +20,6 @@
#include "winbase.h"
#include "wincrypt.h"
#include "wine/debug.h"
-#include "wine/list.h"
#include "crypt32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
diff --git a/dlls/crypt32/regstore.c b/dlls/crypt32/regstore.c
index 8fb7eeb..b79387f 100644
--- a/dlls/crypt32/regstore.c
+++ b/dlls/crypt32/regstore.c
@@ -23,7 +23,6 @@
#include "winreg.h"
#include "winuser.h"
#include "wine/debug.h"
-#include "wine/list.h"
#include "crypt32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index 5bd19eb..3dfb850 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -35,7 +35,6 @@
#include "winuser.h"
#include "wincrypt.h"
#include "wine/debug.h"
-#include "wine/list.h"
#include "wine/exception.h"
#include "crypt32_private.h"
More information about the wine-cvs
mailing list