From: Nikola Pajkovsky Date: Tue, 19 May 2026 13:42:47 +0000 (+0200) Subject: util: set thunks for sk_${nametype}_new(_reserve) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=30db55ac33cf6b815067149c233f45e4199df9b0;p=thirdparty%2Fopenssl.git util: set thunks for sk_${nametype}_new(_reserve) call OPENSSL_sk_set_thunks for sk_${nametype}_new and sk_${nametype}_new_reserve, and wrap the long generated stack constructor and deep-copy macros across multiple lines so the nested thunk setup is easier to read and maintain. Signed-off-by: Nikola Pajkovsky Reviewed-by: Neil Horman Reviewed-by: Milan Broz MergeDate: Thu Jun 25 12:12:46 2026 (Merged from https://github.com/openssl/openssl/pull/31523) --- diff --git a/util/perl/OpenSSL/stackhash.pm b/util/perl/OpenSSL/stackhash.pm index 39f71e1ce71..e49e2d4defe 100644 --- a/util/perl/OpenSSL/stackhash.pm +++ b/util/perl/OpenSSL/stackhash.pm @@ -28,9 +28,30 @@ sub generate_stack_macros_int { SKM_DEFINE_STACK_OF_INTERNAL(${nametype}, ${realtype}, ${plaintype}) #define sk_${nametype}_num(sk) OPENSSL_sk_num(ossl_check_const_${nametype}_sk_type(sk)) #define sk_${nametype}_value(sk, idx) ((${realtype} *)OPENSSL_sk_value(ossl_check_const_${nametype}_sk_type(sk), (idx))) -#define sk_${nametype}_new(cmp) ((STACK_OF(${nametype}) *)OPENSSL_sk_set_copy_thunks(OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_${nametype}_compfunc_type(cmp)), sk_${nametype}_cmpfunc_thunk), sk_${nametype}_copyfunc_thunk)) -#define sk_${nametype}_new_null() ((STACK_OF(${nametype}) *)OPENSSL_sk_set_thunks(OPENSSL_sk_set_copy_thunks(OPENSSL_sk_new_null(), sk_${nametype}_copyfunc_thunk), sk_${nametype}_freefunc_thunk)) -#define sk_${nametype}_new_reserve(cmp, n) ((STACK_OF(${nametype}) *)OPENSSL_sk_set_copy_thunks(OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new_reserve(ossl_check_${nametype}_compfunc_type(cmp), (n)), sk_${nametype}_cmpfunc_thunk), sk_${nametype}_copyfunc_thunk)) +#define sk_${nametype}_new(cmp) \\ + ((STACK_OF(${nametype}) *)OPENSSL_sk_set_thunks( \\ + OPENSSL_sk_set_copy_thunks( \\ + OPENSSL_sk_set_cmp_thunks( \\ + OPENSSL_sk_new(ossl_check_${nametype}_compfunc_type(cmp)), \\ + sk_${nametype}_cmpfunc_thunk), \\ + sk_${nametype}_copyfunc_thunk), \\ + sk_${nametype}_freefunc_thunk)) +#define sk_${nametype}_new_null() \\ + ((STACK_OF(${nametype}) *)OPENSSL_sk_set_thunks( \\ + OPENSSL_sk_set_copy_thunks( \\ + OPENSSL_sk_set_cmp_thunks( \\ + OPENSSL_sk_new_null(), \\ + sk_${nametype}_cmpfunc_thunk), \\ + sk_${nametype}_copyfunc_thunk), \\ + sk_${nametype}_freefunc_thunk)) +#define sk_${nametype}_new_reserve(cmp, n) \\ + ((STACK_OF(${nametype}) *)OPENSSL_sk_set_thunks( \\ + OPENSSL_sk_set_copy_thunks( \\ + OPENSSL_sk_set_cmp_thunks( \\ + OPENSSL_sk_new_reserve(ossl_check_${nametype}_compfunc_type(cmp), (n)), \\ + sk_${nametype}_cmpfunc_thunk), \\ + sk_${nametype}_copyfunc_thunk), \\ + sk_${nametype}_freefunc_thunk)) #define sk_${nametype}_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_${nametype}_sk_type(sk), (n)) #define sk_${nametype}_free(sk) OPENSSL_sk_free(ossl_check_${nametype}_sk_type(sk)) #define sk_${nametype}_zero(sk) OPENSSL_sk_zero(ossl_check_${nametype}_sk_type(sk)) @@ -49,7 +70,11 @@ SKM_DEFINE_STACK_OF_INTERNAL(${nametype}, ${realtype}, ${plaintype}) #define sk_${nametype}_sort(sk) OPENSSL_sk_sort(ossl_check_${nametype}_sk_type(sk)) #define sk_${nametype}_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_${nametype}_sk_type(sk)) #define sk_${nametype}_dup(sk) ((STACK_OF(${nametype}) *)OPENSSL_sk_dup(ossl_check_const_${nametype}_sk_type(sk))) -#define sk_${nametype}_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(${nametype}) *)OPENSSL_sk_deep_copy(ossl_check_const_${nametype}_sk_type(sk), ossl_check_${nametype}_copyfunc_type(copyfunc), ossl_check_${nametype}_freefunc_type(freefunc))) +#define sk_${nametype}_deep_copy(sk, copyfunc, freefunc) \\ + ((STACK_OF(${nametype}) *)OPENSSL_sk_deep_copy( \\ + ossl_check_const_${nametype}_sk_type(sk), \\ + ossl_check_${nametype}_copyfunc_type(copyfunc), \\ + ossl_check_${nametype}_freefunc_type(freefunc))) #define sk_${nametype}_set_cmp_func(sk, cmp) ((sk_${nametype}_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_compfunc_type(cmp))) END_MACROS