Jacek Caban : crypt32: Use linked pointer instead of context type to test for linked contexts.
Alexandre Julliard
julliard at winehq.org
Mon Oct 14 12:39:29 CDT 2013
Module: wine
Branch: master
Commit: b2b71c20855611bf0f2bfd3a0bd1eddb3531f41e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b2b71c20855611bf0f2bfd3a0bd1eddb3531f41e
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Oct 14 14:46:52 2013 +0200
crypt32: Use linked pointer instead of context type to test for linked contexts.
---
dlls/crypt32/context.c | 39 +++++++++++++++------------------------
1 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c
index 915ad5e..cdc8c01 100644
--- a/dlls/crypt32/context.c
+++ b/dlls/crypt32/context.c
@@ -26,19 +26,11 @@
WINE_DEFAULT_DEBUG_CHANNEL(context);
-typedef enum _ContextType {
- ContextTypeData,
- ContextTypeLink,
-} ContextType;
-
typedef struct _BASE_CONTEXT
{
LONG ref;
- ContextType type;
- union {
- CONTEXT_PROPERTY_LIST *properties;
- struct _BASE_CONTEXT *linked;
- } u;
+ struct _BASE_CONTEXT *linked;
+ CONTEXT_PROPERTY_LIST *properties;
} BASE_CONTEXT;
#define CONTEXT_FROM_BASE_CONTEXT(p) (void*)(p+1)
@@ -53,9 +45,9 @@ void *Context_CreateDataContext(size_t contextSize)
return NULL;
context->ref = 1;
- context->type = ContextTypeData;
- context->u.properties = ContextPropertyList_Create();
- if (!context->u.properties)
+ context->linked = NULL;
+ context->properties = ContextPropertyList_Create();
+ if (!context->properties)
{
CryptMemFree(context);
return NULL;
@@ -78,8 +70,7 @@ void *Context_CreateLinkContext(unsigned int contextSize, void *linked, unsigned
memcpy(CONTEXT_FROM_BASE_CONTEXT(context), linked, contextSize);
context->ref = 1;
- context->type = ContextTypeLink;
- context->u.linked = BASE_CONTEXT_FROM_CONTEXT(linked);
+ context->linked = BASE_CONTEXT_FROM_CONTEXT(linked);
if (addRef)
Context_AddRef(linked);
@@ -99,7 +90,7 @@ void *Context_GetExtra(const void *context, size_t contextSize)
{
BASE_CONTEXT *baseContext = BASE_CONTEXT_FROM_CONTEXT(context);
- assert(baseContext->type == ContextTypeLink);
+ assert(baseContext->linked != NULL);
return (LPBYTE)CONTEXT_FROM_BASE_CONTEXT(baseContext) + contextSize;
}
@@ -107,18 +98,18 @@ void *Context_GetLinkedContext(void *context)
{
BASE_CONTEXT *baseContext = BASE_CONTEXT_FROM_CONTEXT(context);
- assert(baseContext->type == ContextTypeLink);
- return CONTEXT_FROM_BASE_CONTEXT(baseContext->u.linked);
+ assert(baseContext->linked != NULL);
+ return CONTEXT_FROM_BASE_CONTEXT(baseContext->linked);
}
CONTEXT_PROPERTY_LIST *Context_GetProperties(const void *context)
{
BASE_CONTEXT *ptr = BASE_CONTEXT_FROM_CONTEXT(context);
- while (ptr && ptr->type == ContextTypeLink)
- ptr = ptr->u.linked;
+ while (ptr && ptr->linked)
+ ptr = ptr->linked;
- return (ptr && ptr->type == ContextTypeData) ? ptr->u.properties : NULL;
+ return ptr->properties;
}
BOOL Context_Release(void *context, ContextFreeFunc dataContextFree)
@@ -134,12 +125,12 @@ BOOL Context_Release(void *context, ContextFreeFunc dataContextFree)
if (InterlockedDecrement(&base->ref) == 0)
{
TRACE("freeing %p\n", context);
- if (base->type == ContextTypeData)
+ if (!base->linked)
{
- ContextPropertyList_Free(base->u.properties);
+ ContextPropertyList_Free(base->properties);
dataContextFree(context);
} else {
- Context_Release(CONTEXT_FROM_BASE_CONTEXT(base->u.linked), dataContextFree);
+ Context_Release(CONTEXT_FROM_BASE_CONTEXT(base->linked), dataContextFree);
}
CryptMemFree(base);
}
More information about the wine-cvs
mailing list