Isn’t this going to run into the same issues? The DEFINE_ expansions need to be in their own .c file (one file with all or one file per, I’m not fussed much but the latter seems nicer).
The DEFINE_ macros need to stay in the header for compatibility. To handle the external linkage, a new macro that declares the function prototypes should be introduced. I.e.: # define DECLARE_LHASH_OF(type) \ LHASH_OF(type) * ln_##type##_new(unsigned long (*)(const type *), int (*)(const type *, const type *)); \ void lh_##type##_free(LHASH_OF(type) *); \ … # define DEFINE_LHASH_OF(type) \ DECLARE LHASH_OF(type); \ LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ static ossl_inline LHASH_OF(type) * \ lh_##type##_new(unsigned long (*hfn)(const type *), \ int (*cfn)(const type *, const type *)) \ { \ return (LHASH_OF(type) *) \ OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ } \ static ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ { \ OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ } \ … The headers can then use the DECLARE_LHASH_OF macro to prototype the functions. The .c file uses the DEFINE_LHASH_OF macro to create them. I chose lhash here because it is the simpler of the two, safestack has more options and is a bit more convoluted. I’m willing to make a stab at a PR for this. Pauli -- Dr Paul Dale | Cryptographer | Network Security & Encryption Phone +61 7 3031 7217 Oracle Australia > On 28 Jan 2019, at 4:56 am, Richard Levitte <levi...@openssl.org> wrote: > > On Sun, 27 Jan 2019 18:51:58 +0100, > Viktor Dukhovni wrote: >> >>> On Jan 27, 2019, at 5:33 AM, Tim Hudson <t...@openssl.org> wrote: >>> >>> Tim - I think inline functions in public header files simply shouldn't be >>> present. >> >> I think they have their place, and we should try to make them more portable >> to less capable toolchains as needed. > > A simple way to handle it is to move the DEFINE_ expansions to another > header file. I suggest common_stacks.h and common_lhashes.h > > At the very least for 3.0.0. For 1.1.1, I have no idea... > > Cheers, > Richard > > -- > Richard Levitte levi...@openssl.org > OpenSSL Project http://www.openssl.org/~levitte/ > _______________________________________________ > openssl-project mailing list > openssl-project@openssl.org > https://mta.openssl.org/mailman/listinfo/openssl-project
_______________________________________________ openssl-project mailing list openssl-project@openssl.org https://mta.openssl.org/mailman/listinfo/openssl-project