Ken Thomases : secur32: Extract schan_imp_init/deinit functions.

Alexandre Julliard julliard at winehq.org
Mon Mar 14 14:29:44 CDT 2011


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

Author: Ken Thomases <ken at codeweavers.com>
Date:   Sun Mar 13 18:58:31 2011 -0500

secur32: Extract schan_imp_init/deinit functions.

---

 dlls/secur32/schannel.c |  149 ++++++++++++++++++++++++++--------------------
 1 files changed, 84 insertions(+), 65 deletions(-)

diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index da19b36..0e49112 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -391,6 +391,86 @@ static void schan_imp_free_certificate_credentials(schan_imp_certificate_credent
     pgnutls_certificate_free_credentials((gnutls_certificate_credentials)c);
 }
 
+static void schan_gnutls_log(int level, const char *msg)
+{
+    TRACE("<%d> %s", level, msg);
+}
+
+static BOOL schan_imp_init(void)
+{
+    int ret;
+
+    libgnutls_handle = wine_dlopen(SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0);
+    if (!libgnutls_handle)
+    {
+        WARN("Failed to load libgnutls.\n");
+        return FALSE;
+    }
+
+#define LOAD_FUNCPTR(f) \
+    if (!(p##f = wine_dlsym(libgnutls_handle, #f, NULL, 0))) \
+    { \
+        ERR("Failed to load %s\n", #f); \
+        goto fail; \
+    }
+
+    LOAD_FUNCPTR(gnutls_alert_get)
+    LOAD_FUNCPTR(gnutls_alert_get_name)
+    LOAD_FUNCPTR(gnutls_certificate_allocate_credentials)
+    LOAD_FUNCPTR(gnutls_certificate_free_credentials)
+    LOAD_FUNCPTR(gnutls_certificate_get_peers)
+    LOAD_FUNCPTR(gnutls_cipher_get)
+    LOAD_FUNCPTR(gnutls_cipher_get_key_size)
+    LOAD_FUNCPTR(gnutls_credentials_set)
+    LOAD_FUNCPTR(gnutls_deinit)
+    LOAD_FUNCPTR(gnutls_global_deinit)
+    LOAD_FUNCPTR(gnutls_global_init)
+    LOAD_FUNCPTR(gnutls_global_set_log_function)
+    LOAD_FUNCPTR(gnutls_global_set_log_level)
+    LOAD_FUNCPTR(gnutls_handshake)
+    LOAD_FUNCPTR(gnutls_init)
+    LOAD_FUNCPTR(gnutls_kx_get)
+    LOAD_FUNCPTR(gnutls_mac_get)
+    LOAD_FUNCPTR(gnutls_mac_get_key_size)
+    LOAD_FUNCPTR(gnutls_perror)
+    LOAD_FUNCPTR(gnutls_protocol_get_version)
+    LOAD_FUNCPTR(gnutls_set_default_priority)
+    LOAD_FUNCPTR(gnutls_record_recv);
+    LOAD_FUNCPTR(gnutls_record_send);
+    LOAD_FUNCPTR(gnutls_transport_set_errno)
+    LOAD_FUNCPTR(gnutls_transport_set_ptr)
+    LOAD_FUNCPTR(gnutls_transport_set_pull_function)
+    LOAD_FUNCPTR(gnutls_transport_set_push_function)
+#undef LOAD_FUNCPTR
+
+    ret = pgnutls_global_init();
+    if (ret != GNUTLS_E_SUCCESS)
+    {
+        pgnutls_perror(ret);
+        goto fail;
+    }
+
+    if (TRACE_ON(secur32))
+    {
+        pgnutls_global_set_log_level(4);
+        pgnutls_global_set_log_function(schan_gnutls_log);
+    }
+
+    return TRUE;
+
+fail:
+    wine_dlclose(libgnutls_handle, NULL, 0);
+    libgnutls_handle = NULL;
+    return FALSE;
+}
+
+static void schan_imp_deinit(void)
+{
+    pgnutls_global_deinit();
+    wine_dlclose(libgnutls_handle, NULL, 0);
+    libgnutls_handle = NULL;
+}
+
 
 #define SCHAN_INVALID_HANDLE ~0UL
 
@@ -1520,11 +1600,6 @@ static SECURITY_STATUS SEC_ENTRY schan_DeleteSecurityContext(PCtxtHandle context
     return SEC_E_OK;
 }
 
-static void schan_gnutls_log(int level, const char *msg)
-{
-    TRACE("<%d> %s", level, msg);
-}
-
 static const SecurityFunctionTableA schanTableA = {
     1,
     NULL, /* EnumerateSecurityPackagesA */
@@ -1616,63 +1691,9 @@ void SECUR32_initSchannelSP(void)
             (SEC_WCHAR *)schannelComment },
     };
     SecureProvider *provider;
-    int ret;
 
-    libgnutls_handle = wine_dlopen(SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0);
-    if (!libgnutls_handle)
-    {
-        WARN("Failed to load libgnutls.\n");
+    if (!schan_imp_init())
         return;
-    }
-
-#define LOAD_FUNCPTR(f) \
-    if (!(p##f = wine_dlsym(libgnutls_handle, #f, NULL, 0))) \
-    { \
-        ERR("Failed to load %s\n", #f); \
-        goto fail; \
-    }
-
-    LOAD_FUNCPTR(gnutls_alert_get)
-    LOAD_FUNCPTR(gnutls_alert_get_name)
-    LOAD_FUNCPTR(gnutls_certificate_allocate_credentials)
-    LOAD_FUNCPTR(gnutls_certificate_free_credentials)
-    LOAD_FUNCPTR(gnutls_certificate_get_peers)
-    LOAD_FUNCPTR(gnutls_cipher_get)
-    LOAD_FUNCPTR(gnutls_cipher_get_key_size)
-    LOAD_FUNCPTR(gnutls_credentials_set)
-    LOAD_FUNCPTR(gnutls_deinit)
-    LOAD_FUNCPTR(gnutls_global_deinit)
-    LOAD_FUNCPTR(gnutls_global_init)
-    LOAD_FUNCPTR(gnutls_global_set_log_function)
-    LOAD_FUNCPTR(gnutls_global_set_log_level)
-    LOAD_FUNCPTR(gnutls_handshake)
-    LOAD_FUNCPTR(gnutls_init)
-    LOAD_FUNCPTR(gnutls_kx_get)
-    LOAD_FUNCPTR(gnutls_mac_get)
-    LOAD_FUNCPTR(gnutls_mac_get_key_size)
-    LOAD_FUNCPTR(gnutls_perror)
-    LOAD_FUNCPTR(gnutls_protocol_get_version)
-    LOAD_FUNCPTR(gnutls_set_default_priority)
-    LOAD_FUNCPTR(gnutls_record_recv);
-    LOAD_FUNCPTR(gnutls_record_send);
-    LOAD_FUNCPTR(gnutls_transport_set_errno)
-    LOAD_FUNCPTR(gnutls_transport_set_ptr)
-    LOAD_FUNCPTR(gnutls_transport_set_pull_function)
-    LOAD_FUNCPTR(gnutls_transport_set_push_function)
-#undef LOAD_FUNCPTR
-
-    ret = pgnutls_global_init();
-    if (ret != GNUTLS_E_SUCCESS)
-    {
-        pgnutls_perror(ret);
-        goto fail;
-    }
-
-    if (TRACE_ON(secur32))
-    {
-        pgnutls_global_set_log_level(4);
-        pgnutls_global_set_log_function(schan_gnutls_log);
-    }
 
     schan_handle_table = HeapAlloc(GetProcessHeap(), 0, 64 * sizeof(*schan_handle_table));
     if (!schan_handle_table)
@@ -1696,8 +1717,7 @@ void SECUR32_initSchannelSP(void)
 fail:
     HeapFree(GetProcessHeap(), 0, schan_handle_table);
     schan_handle_table = NULL;
-    wine_dlclose(libgnutls_handle, NULL, 0);
-    libgnutls_handle = NULL;
+    schan_imp_deinit();
     return;
 }
 
@@ -1705,7 +1725,7 @@ void SECUR32_deinitSchannelSP(void)
 {
     SIZE_T i = schan_handle_count;
 
-    if (!libgnutls_handle) return;
+    if (!schan_handle_table) return;
 
     /* deinitialized sessions first because a pointer to the credentials
      * may be stored for the session. */
@@ -1730,8 +1750,7 @@ void SECUR32_deinitSchannelSP(void)
         }
     }
     HeapFree(GetProcessHeap(), 0, schan_handle_table);
-    pgnutls_global_deinit();
-    wine_dlclose(libgnutls_handle, NULL, 0);
+    schan_imp_deinit();
 }
 
 #else /* SONAME_LIBGNUTLS */




More information about the wine-cvs mailing list