From 14321d225b38b39a11aa599c862a7e6121e42e39 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Thu, 27 Sep 2007 12:36:06 -0700 Subject: [PATCH] Implement CRYPT_WriteSerializedStoreToFile using CRYPT_WriteSerializedStoreToStream --- dlls/crypt32/serialize.c | 60 +++------------------------------------------- 1 files changed, 4 insertions(+), 56 deletions(-) diff --git a/dlls/crypt32/serialize.c b/dlls/crypt32/serialize.c index 44ee510..2207acc 100644 --- a/dlls/crypt32/serialize.c +++ b/dlls/crypt32/serialize.c @@ -599,68 +599,16 @@ BOOL CRYPT_WriteSerializedStoreToStream( return ret; } -static BOOL CRYPT_SerializeContextsToFile(HANDLE file, - const WINE_CONTEXT_INTERFACE *contextInterface, HCERTSTORE store) +static BOOL CRYPT_FileOutputFunc(void *handle, const void *buffer, DWORD size) { - const void *context = NULL; - BOOL ret; - - do { - context = contextInterface->enumContextsInStore(store, context); - if (context) - { - DWORD size = 0; - LPBYTE buf = NULL; - - ret = contextInterface->serialize(context, 0, NULL, &size); - if (size) - buf = CryptMemAlloc(size); - if (buf) - { - ret = contextInterface->serialize(context, 0, buf, &size); - if (ret) - ret = WriteFile(file, buf, size, &size, NULL); - } - CryptMemFree(buf); - } - else - ret = TRUE; - } while (ret && context != NULL); - if (context) - contextInterface->free(context); - return ret; + return WriteFile(handle, buffer, size, &size, NULL); } BOOL CRYPT_WriteSerializedStoreToFile(HANDLE file, HCERTSTORE store) { - static const BYTE fileTrailer[12] = { 0 }; - WINE_CONTEXT_INTERFACE interface; - BOOL ret; - DWORD size; - SetFilePointer(file, 0, NULL, FILE_BEGIN); - ret = WriteFile(file, fileHeader, sizeof(fileHeader), &size, NULL); - if (ret) - { - memcpy(&interface, pCertInterface, sizeof(interface)); - interface.serialize = (SerializeElementFunc)CRYPT_SerializeCertNoHash; - ret = CRYPT_SerializeContextsToFile(file, &interface, store); - } - if (ret) - { - memcpy(&interface, pCRLInterface, sizeof(interface)); - interface.serialize = (SerializeElementFunc)CRYPT_SerializeCRLNoHash; - ret = CRYPT_SerializeContextsToFile(file, &interface, store); - } - if (ret) - { - memcpy(&interface, pCTLInterface, sizeof(interface)); - interface.serialize = (SerializeElementFunc)CRYPT_SerializeCTLNoHash; - ret = CRYPT_SerializeContextsToFile(file, &interface, store); - } - if (ret) - ret = WriteFile(file, fileTrailer, sizeof(fileTrailer), &size, NULL); - return ret; + return CRYPT_WriteSerializedStoreToStream(store, CRYPT_FileOutputFunc, + file); } BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore, -- 1.4.1