From c6029deab2dba334874b17a9969b6c5fbbb7f96c Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 3 Sep 2020 17:35:41 +0100 Subject: [PATCH] Streamline the safestack generated code The safestack code generation was generating a little too much. Some of it could be done with a normal macro. Reviewed-by: Richard Levitte Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/12781) --- include/openssl/safestack.h.in | 31 +++++++++++++++++++++++++++++++ util/perl/OpenSSL/stackhash.pm | 29 +---------------------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/include/openssl/safestack.h.in b/include/openssl/safestack.h.in index a8e9d7abda..aac56608ca 100644 --- a/include/openssl/safestack.h.in +++ b/include/openssl/safestack.h.in @@ -33,6 +33,37 @@ extern "C" { # define STACK_OF(type) struct stack_st_##type +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + # define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ diff --git a/util/perl/OpenSSL/stackhash.pm b/util/perl/OpenSSL/stackhash.pm index 21d852eae0..fd7a8cbd06 100644 --- a/util/perl/OpenSSL/stackhash.pm +++ b/util/perl/OpenSSL/stackhash.pm @@ -24,34 +24,7 @@ sub generate_stack_macros_int { my $plaintype = shift; my $macros = <