From: Selva Nair Date: Fri, 26 Jan 2018 16:05:32 +0000 (-0500) Subject: Move code to free cd to a function CAPI_DATA_free() X-Git-Tag: v2.5_beta1~504 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29a475c6ce0fa51b173121033cbd0f280948e06c;p=thirdparty%2Fopenvpn.git Move code to free cd to a function CAPI_DATA_free() - Avoids code-repetition especially so when support for more key types are added. Signed-off-by: Selva Nair Acked-by: Steffan Karger Acked-by: Gert Doering Message-Id: <1516982732-24145-1-git-send-email-selva.nair@gmail.com> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg16383.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/cryptoapi.c b/src/openvpn/cryptoapi.c index f155123d0..0349191e7 100644 --- a/src/openvpn/cryptoapi.c +++ b/src/openvpn/cryptoapi.c @@ -108,6 +108,31 @@ typedef struct _CAPI_DATA { BOOL free_crypt_prov; } CAPI_DATA; +static void +CAPI_DATA_free(CAPI_DATA *cd) +{ + if (!cd) + { + return; + } + if (cd->free_crypt_prov && cd->crypt_prov) + { + if (cd->key_spec == CERT_NCRYPT_KEY_SPEC) + { + NCryptFreeObject(cd->crypt_prov); + } + else + { + CryptReleaseContext(cd->crypt_prov, 0); + } + } + if (cd->cert_context) + { + CertFreeCertificateContext(cd->cert_context); + } + free(cd); +} + static char * ms_error_text(DWORD ms_err) { @@ -363,22 +388,7 @@ finish(RSA *rsa) { return 0; } - if (cd->crypt_prov && cd->free_crypt_prov) - { - if (cd->key_spec == CERT_NCRYPT_KEY_SPEC) - { - NCryptFreeObject(cd->crypt_prov); - } - else - { - CryptReleaseContext(cd->crypt_prov, 0); - } - } - if (cd->cert_context) - { - CertFreeCertificateContext(cd->cert_context); - } - free(cd); + CAPI_DATA_free(cd); RSA_meth_free((RSA_METHOD*) rsa_meth); return 1; } @@ -614,25 +624,7 @@ err: { free(my_rsa_method); } - if (cd) - { - if (cd->free_crypt_prov && cd->crypt_prov) - { - if (cd->key_spec == CERT_NCRYPT_KEY_SPEC) - { - NCryptFreeObject(cd->crypt_prov); - } - else - { - CryptReleaseContext(cd->crypt_prov, 0); - } - } - if (cd->cert_context) - { - CertFreeCertificateContext(cd->cert_context); - } - free(cd); - } + CAPI_DATA_free(cd); } return 0; }