Juan Lang : crypt32: Introduce a helper function to search for certificates that doesn' t require recreating the search key for every certificate.

Alexandre Julliard julliard at winehq.org
Mon Oct 19 09:56:07 CDT 2009


Module: wine
Branch: master
Commit: b2d27097b5b8f7f697880da5ce82f6dc95e1e59d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b2d27097b5b8f7f697880da5ce82f6dc95e1e59d

Author: Juan Lang <juan.lang at gmail.com>
Date:   Thu Oct 15 10:54:09 2009 -0700

crypt32: Introduce a helper function to search for certificates that doesn't require recreating the search key for every certificate.

---

 dlls/crypt32/cert.c |   34 +++++++++++++++++-----------------
 1 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c
index b640c30..618c578 100644
--- a/dlls/crypt32/cert.c
+++ b/dlls/crypt32/cert.c
@@ -1120,12 +1120,6 @@ DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,
 typedef BOOL (*CertCompareFunc)(PCCERT_CONTEXT pCertContext, DWORD dwType,
  DWORD dwFlags, const void *pvPara);
 
-static BOOL compare_cert_any(PCCERT_CONTEXT pCertContext, DWORD dwType,
- DWORD dwFlags, const void *pvPara)
-{
-    return TRUE;
-}
-
 static BOOL compare_cert_by_md5_hash(PCCERT_CONTEXT pCertContext, DWORD dwType,
  DWORD dwFlags, const void *pvPara)
 {
@@ -1421,12 +1415,22 @@ static inline PCCERT_CONTEXT cert_compare_certs_in_store(HCERTSTORE store,
     return ret;
 }
 
+typedef PCCERT_CONTEXT (*CertFindFunc)(HCERTSTORE store, DWORD dwType,
+ DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev);
+
+static PCCERT_CONTEXT find_cert_any(HCERTSTORE store, DWORD dwType,
+ DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev)
+{
+    return CertEnumCertificatesInStore(store, prev);
+}
+
 PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
  DWORD dwCertEncodingType, DWORD dwFlags, DWORD dwType, const void *pvPara,
  PCCERT_CONTEXT pPrevCertContext)
 {
     PCCERT_CONTEXT ret;
-    CertCompareFunc compare;
+    CertFindFunc find = NULL;
+    CertCompareFunc compare = NULL;
 
     TRACE("(%p, %08x, %08x, %08x, %p, %p)\n", hCertStore, dwCertEncodingType,
 	 dwFlags, dwType, pvPara, pPrevCertContext);
@@ -1434,7 +1438,7 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
     switch (dwType >> CERT_COMPARE_SHIFT)
     {
     case CERT_COMPARE_ANY:
-        compare = compare_cert_any;
+        find = find_cert_any;
         break;
     case CERT_COMPARE_MD5_HASH:
         compare = compare_cert_by_md5_hash;
@@ -1465,21 +1469,17 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
         break;
     default:
         FIXME("find type %08x unimplemented\n", dwType);
-        compare = NULL;
     }
 
-    if (compare)
-    {
+    if (find)
+        ret = find(hCertStore, dwFlags, dwType, pvPara, pPrevCertContext);
+    else if (compare)
         ret = cert_compare_certs_in_store(hCertStore, pPrevCertContext,
          compare, dwType, dwFlags, pvPara);
-        if (!ret)
-            SetLastError(CRYPT_E_NOT_FOUND);
-    }
     else
-    {
-        SetLastError(CRYPT_E_NOT_FOUND);
         ret = NULL;
-    }
+    if (!ret)
+        SetLastError(CRYPT_E_NOT_FOUND);
     TRACE("returning %p\n", ret);
     return ret;
 }




More information about the wine-cvs mailing list