Juan Lang : wintrust: Return error directly from WINTRUST_CopyChain.

Alexandre Julliard julliard at winehq.org
Fri Jan 29 10:56:30 CST 2010


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Wed Jan 27 14:13:06 2010 -0800

wintrust: Return error directly from WINTRUST_CopyChain.

---

 dlls/wintrust/softpub.c |   27 +++++++++++++++++----------
 1 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index c7d5f6a..29d8523 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -694,24 +694,22 @@ static DWORD WINTRUST_TrustStatusToError(DWORD errorStatus)
     return error;
 }
 
-static BOOL WINTRUST_CopyChain(CRYPT_PROVIDER_DATA *data, DWORD signerIdx)
+static DWORD WINTRUST_CopyChain(CRYPT_PROVIDER_DATA *data, DWORD signerIdx)
 {
-    BOOL ret;
+    DWORD err, i;
     PCERT_SIMPLE_CHAIN simpleChain =
      data->pasSigners[signerIdx].pChainContext->rgpChain[0];
-    DWORD i;
 
     data->pasSigners[signerIdx].pasCertChain[0].dwConfidence =
      WINTRUST_TrustStatusToConfidence(
      simpleChain->rgpElement[0]->TrustStatus.dwErrorStatus);
     data->pasSigners[signerIdx].pasCertChain[0].pChainElement =
      simpleChain->rgpElement[0];
-    ret = TRUE;
-    for (i = 1; ret && i < simpleChain->cElement; i++)
+    err = ERROR_SUCCESS;
+    for (i = 1; !err && i < simpleChain->cElement; i++)
     {
-        ret = data->psPfns->pfnAddCert2Chain(data, signerIdx, FALSE, 0,
-         simpleChain->rgpElement[i]->pCertContext);
-        if (ret)
+        if (data->psPfns->pfnAddCert2Chain(data, signerIdx, FALSE, 0,
+         simpleChain->rgpElement[i]->pCertContext))
         {
             data->pasSigners[signerIdx].pasCertChain[i].pChainElement =
              simpleChain->rgpElement[i];
@@ -719,12 +717,14 @@ static BOOL WINTRUST_CopyChain(CRYPT_PROVIDER_DATA *data, DWORD signerIdx)
              WINTRUST_TrustStatusToConfidence(
              simpleChain->rgpElement[i]->TrustStatus.dwErrorStatus);
         }
+        else
+            err = GetLastError();
     }
     data->pasSigners[signerIdx].pasCertChain[simpleChain->cElement - 1].dwError
      = WINTRUST_TrustStatusToError(
      simpleChain->rgpElement[simpleChain->cElement - 1]->
      TrustStatus.dwErrorStatus);
-    return ret;
+    return err;
 }
 
 static void WINTRUST_CreateChainPolicyCreateInfo(
@@ -792,7 +792,9 @@ static BOOL WINTRUST_CreateChainForSigner(CRYPT_PROVIDER_DATA *data,
             }
             else
             {
-                if ((ret = WINTRUST_CopyChain(data, signer)))
+                DWORD err;
+
+                if (!(err = WINTRUST_CopyChain(data, signer)))
                 {
                     if (data->psPfns->pfnCertCheckPolicy)
                         ret = data->psPfns->pfnCertCheckPolicy(data, signer,
@@ -800,6 +802,11 @@ static BOOL WINTRUST_CreateChainForSigner(CRYPT_PROVIDER_DATA *data,
                     else
                         TRACE("no cert check policy, skipping policy check\n");
                 }
+                else
+                {
+                    SetLastError(err);
+                    ret = FALSE;
+                }
             }
         }
     }




More information about the wine-cvs mailing list