From 262cda1cdac3d5c8f2fdb3c30b6d1c1a982864d6 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 3 Sep 2020 17:09:18 +0100 Subject: [PATCH] Remove some safestack things that are no longer needed ... and add SKM_DEFINE_STACK_OF_INTERNAL Reviewed-by: Richard Levitte Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/12781) --- include/openssl/safestack.h.in | 57 ---------------------------------- util/perl/OpenSSL/ParseC.pm | 37 +++++++++------------- 2 files changed, 15 insertions(+), 79 deletions(-) diff --git a/include/openssl/safestack.h.in b/include/openssl/safestack.h.in index 943aa5861e..a8e9d7abda 100644 --- a/include/openssl/safestack.h.in +++ b/include/openssl/safestack.h.in @@ -163,28 +163,6 @@ extern "C" { typedef char *OPENSSL_STRING; typedef const char *OPENSSL_CSTRING; -# define DEFINE_STACK_OF_STRING() \ - DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -# define DEFINE_STACK_OF_CSTRING() \ - DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) - -/* - * If we're building OpenSSL, or we have no-deprecated configured, - * then we don't define the inline functions (see |SKM_DEFINE_STACK_OF|, - * above), we just declare the stack datatypes. Otherwise, for compatibility - * and to not remove the API's, we define the functions. We have the - * trailing semicolon so that uses of this never need it. - */ -#if defined(OPENSSL_BUILDING_OPENSSL) || defined(OPENSSL_NO_DEPRECATED_3_0) -# define DEFINE_OR_DECLARE_STACK_OF(s) STACK_OF(s); -# define DEFINE_OR_DECLARE_STACK_OF_STRING() STACK_OF(OPENSSL_STRING); -# define DEFINE_OR_DECLARE_STACK_OF_CSTRING() STACK_OF(OPENSSL_CSTRING); -#else -# define DEFINE_OR_DECLARE_STACK_OF(s) DEFINE_STACK_OF(s) -# define DEFINE_OR_DECLARE_STACK_OF_STRING() DEFINE_STACK_OF_STRING() -# define DEFINE_OR_DECLARE_STACK_OF_CSTRING() DEFINE_STACK_OF_CSTRING() -#endif - /*- * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned @@ -208,41 +186,6 @@ typedef void *OPENSSL_BLOCK; -} #endif -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ - # ifdef __cplusplus } # endif diff --git a/util/perl/OpenSSL/ParseC.pm b/util/perl/OpenSSL/ParseC.pm index dd1da99f58..c5be9b8c2a 100644 --- a/util/perl/OpenSSL/ParseC.pm +++ b/util/perl/OpenSSL/ParseC.pm @@ -357,6 +357,21 @@ static ossl_inline STACK_OF($1) *sk_$1_deep_copy(const STACK_OF($1) *sk, sk_$1_freefunc freefunc); static ossl_inline sk_$1_compfunc sk_$1_set_cmp_func(STACK_OF($1) *sk, sk_$1_compfunc compare); +EOF + } + }, + { regexp => qr/SKM_DEFINE_STACK_OF_INTERNAL<<<\((.*),\s*(.*),\s*(.*)\)>>>/, + massager => sub { + return (<<"EOF"); +STACK_OF($1); +typedef int (*sk_$1_compfunc)(const $3 * const *a, const $3 *const *b); +typedef void (*sk_$1_freefunc)($3 *a); +typedef $3 * (*sk_$1_copyfunc)(const $3 *a); +static ossl_unused ossl_inline $2 *ossl_check_$1_type($2 *ptr); +static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_$1_sk_type(const STACK_OF($1) *sk); +static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_$1_compfunc_type(sk_$1_compfunc cmp); +static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_$1_copyfunc_type(sk_$1_copyfunc cpy); +static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_$1_freefunc_type(sk_$1_freefunc fr); EOF } }, @@ -372,28 +387,6 @@ EOF { regexp => qr/DEFINE_STACK_OF_CONST<<<\((.*)\)>>>/, massager => sub { return ("SKM_DEFINE_STACK_OF($1,const $1,$1)"); }, }, - { regexp => qr/DEFINE_STACK_OF_STRING<<<\((.*?)\)>>>/, - massager => sub { - return ("DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char)"); - } - }, - { regexp => qr/DEFINE_STACK_OF_CSTRING<<<\((.*?)\)>>>/, - massager => sub { - return ("DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char)"); - } - }, - # DEFINE_OR_DECLARE macro calls must be interpretted as DEFINE macro - # calls, because that's what they look like to the external apps. - # (if that ever changes, we must change the substitutions to STACK_OF) - { regexp => qr/DEFINE_OR_DECLARE_STACK_OF<<<\((.*?)\)>>>/, - massager => sub { return ("DEFINE_STACK_OF($1)"); } - }, - { regexp => qr/DEFINE_OR_DECLARE_STACK_OF_STRING<<<\(\)>>>/, - massager => sub { return ("DEFINE_STACK_OF_STRING()"); }, - }, - { regexp => qr/DEFINE_OR_DECLARE_STACK_OF_CSTRING<<<\(\)>>>/, - massager => sub { return ("DEFINE_STACK_OF_CSTRING()"); }, - }, ##### # ASN1 stuff