[openssl/openssl] bio_dgram vs IPv6

Michael Wojcik Michael.Wojcik at microfocus.com
Thu Mar 31 21:23:05 UTC 2022


> From: Michael Richardson <mcr at sandelman.ca>
> Sent: Thursday, 31 March, 2022 14:18
> 
> Michael Wojcik <Michael.Wojcik at microfocus.com> wrote:
>     > #if defined OPENSSL_SYS_WINDOWS
>     > # include <shared/netiodef.h>
>     > #else
>     > # include <netinet/ip6.h>
>     > #endif
> 
> But, don't all the OPENSSL_* macros expand to 0/1, anyway, so we actually
> just want #if OPENSSL_SYS_WINDOWS?

I did a quick grep through the source for 1.1.1k (just because that's what I had to hand; we've actually just finished updating my portfolio to 1.1.1n), and there's a mix of #if OPENSSL_SYS_WINDOWS and #if defined(OPENSSL_SYS_WINDOWS). apps/s_client.c uses the latter, for example.

Actually, in the context of #if expressions, unrecognized tokens expand to 0 anyway:

	After all replacements due to macro expansion and the defined unary
	operator have been performed, all remaining identifiers are replaced
	with the pp-number 0...

(ISO 9899:1999 6.10.1 #3)

So defining a macro used for conditional inclusion to the value 0 is kind of a bad idea, since that means there's different behavior between #if FOO and #if defined FOO. Much better to not define it and get the default value of 0 if you want to turn it off.

But that said, #if OPENSSL_SYS_WINDOWS is safer for the same reason: it doesn't matter whether it's defined as 0, or not defined at all.

The "defined" operator is overused in C source generally. It's good for things like header inclusion guards. It's not really a good choice for most other cases of conditional inclusion.

-- 
Michael Wojcik


More information about the openssl-users mailing list