Module: wine Branch: master Commit: 51a1f5a64241f14d872ccf0b7dfa0c45c2217a24 URL: http://source.winehq.org/git/wine.git/?a=commit;h=51a1f5a64241f14d872ccf0b7d...
Author: Juan Lang juan.lang@gmail.com Date: Mon Nov 2 12:31:15 2009 -0800
crypt32: Abstract function used to read from reading a serialized store.
---
dlls/crypt32/serialize.c | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/dlls/crypt32/serialize.c b/dlls/crypt32/serialize.c index 2cc6ffd..45a3e25 100644 --- a/dlls/crypt32/serialize.c +++ b/dlls/crypt32/serialize.c @@ -425,14 +425,18 @@ const void *CRYPT_ReadSerializedElement(const BYTE *pbElement, DWORD cbElement,
static const BYTE fileHeader[] = { 0, 0, 0, 0, 'C','E','R','T' };
-BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) +typedef BOOL (*read_serialized_func)(void *handle, void *buffer, + DWORD bytesToRead, DWORD *bytesRead); + +static BOOL CRYPT_ReadSerializedStore(void *handle, + read_serialized_func read_func, HCERTSTORE store) { BYTE fileHeaderBuf[sizeof(fileHeader)]; DWORD read; BOOL ret;
/* Failure reading is non-critical, we'll leave the store empty */ - ret = ReadFile(file, fileHeaderBuf, sizeof(fileHeaderBuf), &read, NULL); + ret = read_func(handle, fileHeaderBuf, sizeof(fileHeaderBuf), &read); if (ret) { if (!read) @@ -448,7 +452,7 @@ BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) DWORD bufSize = 0;
do { - ret = ReadFile(file, &propHdr, sizeof(propHdr), &read, NULL); + ret = read_func(handle, &propHdr, sizeof(propHdr), &read); if (ret && read == sizeof(propHdr)) { if (contextInterface && context && @@ -470,7 +474,7 @@ BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) } if (buf) { - ret = ReadFile(file, buf, propHdr.cb, &read, NULL); + ret = read_func(handle, buf, propHdr.cb, &read); if (ret && read == propHdr.cb) { if (propHdr.propID == CERT_CERT_PROP_ID) @@ -519,6 +523,17 @@ BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) return ret; }
+static BOOL read_file_wrapper(void *handle, void *buffer, DWORD bytesToRead, + DWORD *bytesRead) +{ + return ReadFile(handle, buffer, bytesToRead, bytesRead, NULL); +} + +BOOL CRYPT_ReadSerializedStoreFromFile(HANDLE file, HCERTSTORE store) +{ + return CRYPT_ReadSerializedStore(file, read_file_wrapper, store); +} + static BOOL WINAPI CRYPT_SerializeCertNoHash(PCCERT_CONTEXT pCertContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement) {