diff --git a/dlls/crypt32/collectionstore.c b/dlls/crypt32/collectionstore.c index 7be5afbcccf..9fa1f05dd83 100644 --- a/dlls/crypt32/collectionstore.c +++ b/dlls/crypt32/collectionstore.c @@ -258,16 +258,17 @@ static void *Collection_enumCert(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL Collection_deleteCert(WINECRYPT_CERTSTORE *store, void *pCertContext) +static BOOL Collection_deleteCert(WINECRYPT_CERTSTORE *store, context_t *context) { + cert_t *cert = (cert_t*)context; BOOL ret; PCCERT_CONTEXT linked; - TRACE("(%p, %p)\n", store, pCertContext); + TRACE("(%p, %p)\n", store, cert); - linked = Context_GetLinkedContext(pCertContext); + linked = Context_GetLinkedContext(&cert->ctx); ret = CertDeleteCertificateFromStore(linked); - CertFreeCertificateContext(pCertContext); + Context_Release(&cert->base); return ret; } @@ -333,16 +334,17 @@ static void *Collection_enumCRL(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL Collection_deleteCRL(WINECRYPT_CERTSTORE *store, void *pCrlContext) +static BOOL Collection_deleteCRL(WINECRYPT_CERTSTORE *store, context_t *context) { + crl_t *crl = (crl_t*)context; BOOL ret; PCCRL_CONTEXT linked; - TRACE("(%p, %p)\n", store, pCrlContext); + TRACE("(%p, %p)\n", store, crl); - linked = Context_GetLinkedContext(pCrlContext); + linked = Context_GetLinkedContext(&crl->ctx); ret = CertDeleteCRLFromStore(linked); - CertFreeCRLContext(pCrlContext); + Context_Release(&crl->base); return ret; } @@ -408,16 +410,17 @@ static void *Collection_enumCTL(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL Collection_deleteCTL(WINECRYPT_CERTSTORE *store, void *pCtlContext) +static BOOL Collection_deleteCTL(WINECRYPT_CERTSTORE *store, context_t *context) { + ctl_t *ctl = (ctl_t*)context; BOOL ret; PCCTL_CONTEXT linked; - TRACE("(%p, %p)\n", store, pCtlContext); + TRACE("(%p, %p)\n", store, ctl); - linked = Context_GetLinkedContext(pCtlContext); + linked = Context_GetLinkedContext(&ctl->ctx); ret = CertDeleteCTLFromStore(linked); - CertFreeCTLContext(pCtlContext); + Context_Release(&ctl->base); return ret; } diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c index 6809b4b7885..05e5d7966cf 100644 --- a/dlls/crypt32/context.c +++ b/dlls/crypt32/context.c @@ -216,9 +216,8 @@ void *ContextList_Enum(struct ContextList *list, void *pPrev) return ret; } -BOOL ContextList_Remove(struct ContextList *list, void *ctx) +BOOL ContextList_Remove(struct ContextList *list, context_t *context) { - context_t *context = context_from_ptr(ctx); BOOL inList = FALSE; EnterCriticalSection(&list->cs); diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h index de1383c3db8..fc1e1228928 100644 --- a/dlls/crypt32/crypt32_private.h +++ b/dlls/crypt32/crypt32_private.h @@ -275,13 +275,11 @@ typedef void * (*EnumFunc)(struct WINE_CRYPTCERTSTORE *store, void *pPrev); typedef BOOL (*AddFunc)(struct WINE_CRYPTCERTSTORE *store, void *context, void *toReplace, const void **ppStoreContext); -typedef BOOL (*DeleteFunc)(struct WINE_CRYPTCERTSTORE *store, void *context); - typedef struct _CONTEXT_FUNCS { AddFunc addContext; EnumFunc enumContext; - DeleteFunc deleteContext; + BOOL (*delete)(struct WINE_CRYPTCERTSTORE*,context_t*); } CONTEXT_FUNCS; typedef enum _CertStoreType { @@ -464,7 +462,7 @@ void *ContextList_Enum(struct ContextList *list, void *pPrev) DECLSPEC_HIDDEN; * or FALSE if not. (The context may have been duplicated, so subsequent * removes have no effect.) */ -BOOL ContextList_Remove(struct ContextList *list, void *context) DECLSPEC_HIDDEN; +BOOL ContextList_Remove(struct ContextList *list, context_t *context) DECLSPEC_HIDDEN; void ContextList_Free(struct ContextList *list) DECLSPEC_HIDDEN; diff --git a/dlls/crypt32/ctl.c b/dlls/crypt32/ctl.c index fb976b4d2c3..26072abd675 100644 --- a/dlls/crypt32/ctl.c +++ b/dlls/crypt32/ctl.c @@ -330,11 +330,12 @@ BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext) else { WINECRYPT_CERTSTORE *hcs = pCtlContext->hCertStore; + ctl_t *ctl = ctl_from_ptr(pCtlContext); if (hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC) ret = FALSE; else - ret = hcs->vtbl->ctls.deleteContext(hcs, (void *)pCtlContext); + ret = hcs->vtbl->ctls.delete(hcs, &ctl->base); if (ret) ret = CertFreeCTLContext(pCtlContext); } diff --git a/dlls/crypt32/provstore.c b/dlls/crypt32/provstore.c index ce9c145bf25..a03a6190040 100644 --- a/dlls/crypt32/provstore.c +++ b/dlls/crypt32/provstore.c @@ -113,17 +113,17 @@ static void *ProvStore_enumCert(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL ProvStore_deleteCert(WINECRYPT_CERTSTORE *store, void *cert) +static BOOL ProvStore_deleteCert(WINECRYPT_CERTSTORE *store, context_t *context) { WINE_PROVIDERSTORE *ps = (WINE_PROVIDERSTORE*)store; BOOL ret = TRUE; - TRACE("(%p, %p)\n", store, cert); + TRACE("(%p, %p)\n", store, context); if (ps->provDeleteCert) - ret = ps->provDeleteCert(ps->hStoreProv, cert, 0); + ret = ps->provDeleteCert(ps->hStoreProv, context_ptr(context), 0); if (ret) - ret = ps->memStore->vtbl->certs.deleteContext(ps->memStore, cert); + ret = ps->memStore->vtbl->certs.delete(ps->memStore, context); return ret; } @@ -180,7 +180,7 @@ static void *ProvStore_enumCRL(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL ProvStore_deleteCRL(WINECRYPT_CERTSTORE *store, void *crl) +static BOOL ProvStore_deleteCRL(WINECRYPT_CERTSTORE *store, context_t *crl) { WINE_PROVIDERSTORE *ps = (WINE_PROVIDERSTORE*)store; BOOL ret = TRUE; @@ -188,9 +188,9 @@ static BOOL ProvStore_deleteCRL(WINECRYPT_CERTSTORE *store, void *crl) TRACE("(%p, %p)\n", store, crl); if (ps->provDeleteCrl) - ret = ps->provDeleteCrl(ps->hStoreProv, crl, 0); + ret = ps->provDeleteCrl(ps->hStoreProv, context_ptr(crl), 0); if (ret) - ret = ps->memStore->vtbl->crls.deleteContext(ps->memStore, crl); + ret = ps->memStore->vtbl->crls.delete(ps->memStore, crl); return ret; } @@ -247,7 +247,7 @@ static void *ProvStore_enumCTL(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL ProvStore_deleteCTL(WINECRYPT_CERTSTORE *store, void *ctl) +static BOOL ProvStore_deleteCTL(WINECRYPT_CERTSTORE *store, context_t *ctl) { WINE_PROVIDERSTORE *ps = (WINE_PROVIDERSTORE*)store; BOOL ret = TRUE; @@ -255,9 +255,9 @@ static BOOL ProvStore_deleteCTL(WINECRYPT_CERTSTORE *store, void *ctl) TRACE("(%p, %p)\n", store, ctl); if (ps->provDeleteCtl) - ret = ps->provDeleteCtl(ps->hStoreProv, ctl, 0); + ret = ps->provDeleteCtl(ps->hStoreProv, context_ptr(ctl), 0); if (ret) - ret = ps->memStore->vtbl->ctls.deleteContext(ps->memStore, ctl); + ret = ps->memStore->vtbl->ctls.delete(ps->memStore, ctl); return ret; } diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c index 3dfb8508803..1ba81c9be4b 100644 --- a/dlls/crypt32/store.c +++ b/dlls/crypt32/store.c @@ -176,16 +176,14 @@ static void *MemStore_enumCert(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL MemStore_deleteCert(WINECRYPT_CERTSTORE *store, void *pCertContext) +static BOOL MemStore_deleteCert(WINECRYPT_CERTSTORE *store, context_t *context) { WINE_MEMSTORE *ms = (WINE_MEMSTORE *)store; - BOOL ret; - if (ContextList_Remove(ms->certs, pCertContext)) - ret = CertFreeCertificateContext(pCertContext); - else - ret = TRUE; - return ret; + if (ContextList_Remove(ms->certs, context)) + Context_Release(context); + + return TRUE; } static BOOL MemStore_addCRL(WINECRYPT_CERTSTORE *store, void *crl, @@ -221,16 +219,14 @@ static void *MemStore_enumCRL(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL MemStore_deleteCRL(WINECRYPT_CERTSTORE *store, void *pCrlContext) +static BOOL MemStore_deleteCRL(WINECRYPT_CERTSTORE *store, context_t *context) { WINE_MEMSTORE *ms = (WINE_MEMSTORE *)store; - BOOL ret; - if (ContextList_Remove(ms->crls, pCrlContext)) - ret = CertFreeCRLContext(pCrlContext); - else - ret = TRUE; - return ret; + if (!ContextList_Remove(ms->crls, context)) + Context_Release(context); + + return TRUE; } static BOOL MemStore_addCTL(WINECRYPT_CERTSTORE *store, void *ctl, @@ -266,16 +262,14 @@ static void *MemStore_enumCTL(WINECRYPT_CERTSTORE *store, void *pPrev) return ret; } -static BOOL MemStore_deleteCTL(WINECRYPT_CERTSTORE *store, void *pCtlContext) +static BOOL MemStore_deleteCTL(WINECRYPT_CERTSTORE *store, context_t *context) { WINE_MEMSTORE *ms = (WINE_MEMSTORE *)store; - BOOL ret; - if (ContextList_Remove(ms->ctls, pCtlContext)) - ret = CertFreeCTLContext(pCtlContext); - else - ret = TRUE; - return ret; + if (!ContextList_Remove(ms->ctls, context)) + Context_Release(context); + + return TRUE; } static void MemStore_addref(WINECRYPT_CERTSTORE *store) @@ -924,7 +918,7 @@ BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext) if (hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC) ret = FALSE; else - ret = hcs->vtbl->certs.deleteContext(hcs, (void *)pCertContext); + ret = hcs->vtbl->certs.delete(hcs, &cert_from_ptr(pCertContext)->base); } return ret; } @@ -1061,7 +1055,7 @@ BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext) if (hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC) ret = FALSE; else - ret = hcs->vtbl->crls.deleteContext(hcs, (void *)pCrlContext); + ret = hcs->vtbl->crls.delete(hcs, &crl_from_ptr(pCrlContext)->base); if (ret) ret = CertFreeCRLContext(pCrlContext); } @@ -1387,7 +1381,7 @@ static void *EmptyStore_enum(WINECRYPT_CERTSTORE *store, void *prev) return FALSE; } -static BOOL EmptyStore_delete(WINECRYPT_CERTSTORE *store, void *context) +static BOOL EmptyStore_delete(WINECRYPT_CERTSTORE *store, context_t *context) { return TRUE; }