]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
util: set thunks for sk_${nametype}_new(_reserve)
authorNikola Pajkovsky <nikolap@openssl.org>
Tue, 19 May 2026 13:42:47 +0000 (15:42 +0200)
committerNeil Horman <nhorman@openssl.org>
Thu, 25 Jun 2026 12:12:29 +0000 (08:12 -0400)
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 <nikolap@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Milan Broz <mbroz@openssl.org>
MergeDate: Thu Jun 25 12:12:46 2026
(Merged from https://github.com/openssl/openssl/pull/31523)

util/perl/OpenSSL/stackhash.pm

index 39f71e1ce7175dd412bf7a05dbffaa7d01113264..e49e2d4defe53644c38756b14a0a68035c45d356 100644 (file)
@@ -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