Juan Lang : cryptui: Move cert creation to a helper function.

Alexandre Julliard julliard at winehq.org
Mon Oct 27 08:02:57 CDT 2008


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Fri Oct 24 14:35:14 2008 -0700

cryptui: Move cert creation to a helper function.

---

 dlls/cryptui/main.c |   76 +++++++++++++++++++++++++++-----------------------
 1 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 065bd6d..e55a8ba 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -99,15 +99,52 @@ BOOL WINAPI CryptUIDlgViewCertificateW(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertVi
     return TRUE;
 }
 
+static PCCERT_CONTEXT make_cert_from_file(LPCWSTR fileName)
+{
+    HANDLE file;
+    DWORD size, encoding = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
+    BYTE *buffer;
+    PCCERT_CONTEXT cert;
+
+    file = CreateFileW(fileName, GENERIC_READ, FILE_SHARE_READ, NULL,
+     OPEN_EXISTING, 0, NULL);
+    if (file == INVALID_HANDLE_VALUE)
+    {
+        WARN("can't open certificate file %s\n", debugstr_w(fileName));
+        return NULL;
+    }
+    if ((size = GetFileSize(file, NULL)))
+    {
+        if ((buffer = HeapAlloc(GetProcessHeap(), 0, size)))
+        {
+            DWORD read;
+            if (!ReadFile(file, buffer, size, &read, NULL) || read != size)
+            {
+                WARN("can't read certificate file %s\n", debugstr_w(fileName));
+                HeapFree(GetProcessHeap(), 0, buffer);
+                CloseHandle(file);
+                return NULL;
+            }
+        }
+    }
+    else
+    {
+        WARN("empty file %s\n", debugstr_w(fileName));
+        CloseHandle(file);
+        return NULL;
+    }
+    CloseHandle(file);
+    cert = CertCreateCertificateContext(encoding, buffer, size);
+    HeapFree(GetProcessHeap(), 0, buffer);
+    return cert;
+}
+
 BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle,
                              PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
 {
     static const WCHAR Root[] = {'R','o','o','t',0};
     BOOL ret;
-    HANDLE file;
     HCERTSTORE store;
-    BYTE *buffer;
-    DWORD size, encoding = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
     const CERT_CONTEXT *cert;
 
     TRACE("(0x%08x, %p, %s, %p, %p)\n", dwFlags, hwndParent, debugstr_w(pwszWizardTitle),
@@ -129,38 +166,9 @@ BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardT
         FIXME("source type not implemented: %u\n", pImportSrc->dwSubjectChoice);
         return FALSE;
     }
-    file = CreateFileW(pImportSrc->pwszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
-                       OPEN_EXISTING, 0, NULL);
-    if (file == INVALID_HANDLE_VALUE)
-    {
-        WARN("can't open certificate file %s\n", debugstr_w(pImportSrc->pwszFileName));
-        return FALSE;
-    }
-    if ((size = GetFileSize(file, NULL)))
-    {
-        if ((buffer = HeapAlloc(GetProcessHeap(), 0, size)))
-        {
-            DWORD read;
-            if (!ReadFile(file, buffer, size, &read, NULL) || read != size)
-            {
-                WARN("can't read certificate file %s\n", debugstr_w(pImportSrc->pwszFileName));
-                HeapFree(GetProcessHeap(), 0, buffer);
-                CloseHandle(file);
-                return FALSE;
-            }
-        }
-    }
-    else
-    {
-        WARN("empty file %s\n", debugstr_w(pImportSrc->pwszFileName));
-        CloseHandle(file);
-        return FALSE;
-    }
-    CloseHandle(file);
-    if (!(cert = CertCreateCertificateContext(encoding, buffer, size)))
+    if (!(cert = make_cert_from_file(pImportSrc->pwszFileName)))
     {
         WARN("unable to create certificate context\n");
-        HeapFree(GetProcessHeap(), 0, buffer);
         return FALSE;
     }
     if (hDestCertStore) store = hDestCertStore;
@@ -171,7 +179,6 @@ BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardT
         {
             WARN("unable to open certificate store\n");
             CertFreeCertificateContext(cert);
-            HeapFree(GetProcessHeap(), 0, buffer);
             return FALSE;
         }
     }
@@ -179,6 +186,5 @@ BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardT
 
     if (!hDestCertStore) CertCloseStore(store, 0);
     CertFreeCertificateContext(cert);
-    HeapFree(GetProcessHeap(), 0, buffer);
     return ret;
 }




More information about the wine-cvs mailing list