From b2b71c20855611bf0f2bfd3a0bd1eddb3531f41e Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 14 Oct 2013 14:46:52 +0200 Subject: [PATCH] crypt32: Use linked pointer instead of context type to test for linked contexts. --- dlls/crypt32/context.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c index 915ad5e41d..cdc8c016e8 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); }