From: Willy Tarreau Date: Tue, 21 May 2019 17:48:44 +0000 (+0200) Subject: MINOR: compat: define a new empty type empty_t for non-implemented fields X-Git-Tag: v2.0-dev4~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9a85a1700b57c8a7fdb0f53b5b161eb6480c9de6;p=thirdparty%2Fhaproxy.git MINOR: compat: define a new empty type empty_t for non-implemented fields Some structures have optional fields which depend on availability of certain features on certain platforms, and having to stuff lots of ifdefs in these structs makes them unreadable. Using real values like ints requires some initialization and adds even more confusion. Here we take a different approach : we create an empty type called empty_t to use as a substitute for the real type that is not implemented and which doesn't contain any value (it's an empty struct). Thus it has a size of zero but an address, thus a pointer may point to it. It will not have to be initialized though. Some initialization code might even continue to work and do nothing like initializing it using memset with its sizeof which is zero. --- diff --git a/include/common/compat.h b/include/common/compat.h index 35782dee2b..07b3666e33 100644 --- a/include/common/compat.h +++ b/include/common/compat.h @@ -33,6 +33,12 @@ #include #include +/* set any optional field in a struct to this type to save ifdefs. Its address + * will still be valid but it will not reserve any room nor require any + * initialization. + */ +typedef struct { } empty_t; + // Redefine some limits that are not present everywhere #ifndef LLONG_MAX # define LLONG_MAX 9223372036854775807LL