Juan Lang : crypt32: Add and use a helper function for getting cert properties.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 3 08:04:36 CDT 2007


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Thu Aug  2 12:21:10 2007 -0700

crypt32: Add and use a helper function for getting cert properties.

---

 dlls/crypt32/cert.c |   74 ++++++++++++++++++++------------------------------
 1 files changed, 30 insertions(+), 44 deletions(-)

diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c
index 940778d..b630f3d 100644
--- a/dlls/crypt32/cert.c
+++ b/dlls/crypt32/cert.c
@@ -167,6 +167,27 @@ static BOOL CertContext_GetHashProp(void *context, DWORD dwPropId,
     return ret;
 }
 
+static BOOL CertContext_CopyParam(void *pvData, DWORD *pcbData, const void *pb,
+ DWORD cb)
+{
+    BOOL ret = TRUE;
+
+    if (!pvData)
+        *pcbData = cb;
+    else if (*pcbData < cb)
+    {
+        SetLastError(ERROR_MORE_DATA);
+        *pcbData = cb;
+        ret = FALSE;
+    }
+    else
+    {
+        memcpy(pvData, pb, cb);
+        *pcbData = cb;
+    }
+    return ret;
+}
+
 static BOOL WINAPI CertContext_GetProperty(void *context, DWORD dwPropId,
  void *pvData, DWORD *pcbData)
 {
@@ -183,21 +204,7 @@ static BOOL WINAPI CertContext_GetProperty(void *context, DWORD dwPropId,
     else
         ret = FALSE;
     if (ret)
-    {
-        if (!pvData)
-            *pcbData = blob.cbData;
-        else if (*pcbData < blob.cbData)
-        {
-            SetLastError(ERROR_MORE_DATA);
-            *pcbData = blob.cbData;
-            ret = FALSE;
-        }
-        else
-        {
-            memcpy(pvData, blob.pbData, blob.cbData);
-            *pcbData = blob.cbData;
-        }
-    }
+        ret = CertContext_CopyParam(pvData, pcbData, blob.pbData, blob.cbData);
     else
     {
         /* Implicit properties */
@@ -283,25 +290,14 @@ BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
         ret = FALSE;
         break;
     case CERT_ACCESS_STATE_PROP_ID:
-        if (!pvData)
-        {
-            *pcbData = sizeof(DWORD);
-            ret = TRUE;
-        }
-        else if (*pcbData < sizeof(DWORD))
-        {
-            SetLastError(ERROR_MORE_DATA);
-            *pcbData = sizeof(DWORD);
-            ret = FALSE;
-        }
+        if (pCertContext->hCertStore)
+            ret = CertGetStoreProperty(pCertContext->hCertStore, dwPropId,
+             pvData, pcbData);
         else
         {
-            if (pCertContext->hCertStore)
-                ret = CertGetStoreProperty(pCertContext->hCertStore, dwPropId,
-                 pvData, pcbData);
-            else
-                *(DWORD *)pvData = 0;
-            ret = TRUE;
+            DWORD state = 0;
+
+            ret = CertContext_CopyParam(pvData, pcbData, &state, sizeof(state));
         }
         break;
     case CERT_KEY_IDENTIFIER_PROP_ID:
@@ -318,18 +314,8 @@ BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
         ret = CertContext_GetProperty((void *)pCertContext,
          CERT_KEY_CONTEXT_PROP_ID, &keyContext, &size);
         if (ret)
-        {
-            if (!pvData)
-                *pcbData = sizeof(HCRYPTPROV);
-            else if (*pcbData < sizeof(HCRYPTPROV))
-            {
-                SetLastError(ERROR_MORE_DATA);
-                *pcbData = sizeof(HCRYPTPROV);
-                ret = FALSE;
-            }
-            else
-                *(HCRYPTPROV *)pvData = keyContext.hCryptProv;
-        }
+            ret = CertContext_CopyParam(pvData, pcbData, &keyContext.hCryptProv,
+             sizeof(keyContext.hCryptProv));
         break;
     }
     case CERT_KEY_PROV_INFO_PROP_ID:




More information about the wine-cvs mailing list