mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-10-26 06:01:20 +01:00
MINOR: compiler: add FIXED_SIZE(size, type, name) macro
FIXED_SIZE() macro can be used to instruct the compiler that the struct member named <name>, handled as <type>, must be stored using <size> bytes and that even if the type used is actualler smaller than the expected size FIXED_SIZE_ARRAY(), similar to FIXED_SIZE() but for arrays: it takes an extra argument which is the number of members. They may be used for portability concerns to ensure a structure mapping remains consistent between platforms.
This commit is contained in:
parent
1e4dbebef2
commit
466a603b59
@ -515,6 +515,28 @@
|
||||
# define ALWAYS_PAD(x) _ALWAYS_PAD(x, __LINE__)
|
||||
#endif
|
||||
|
||||
/* force the struct member named <name> handled as <type> to be stored using
|
||||
* <size> bytes, even if the type used is actually smaller than the
|
||||
* expected <size>.
|
||||
*
|
||||
* This can be useful to ensure struct mapping consistency between
|
||||
* platforms for which native types may differ in size.
|
||||
*
|
||||
* /!\ you must ensure <size> cannot be smaller than actual member size
|
||||
* on supported platforms, because it would result in undefined behaviors
|
||||
* on such systems.
|
||||
*/
|
||||
#ifndef FIXED_SIZE
|
||||
# define _FIXED_SIZE(size, type, name) union { char __fixed_##name[size]; type name; };
|
||||
# define FIXED_SIZE(size, type, name) _FIXED_SIZE(size, type, name)
|
||||
#endif
|
||||
|
||||
/* same as FIXED_SIZE_ARRAY but for arrays */
|
||||
#ifndef FIXED_SIZE_ARRAY
|
||||
# define _FIXED_SIZE_ARRAY(size, number, type, name) union { char __fixed_##name[size * number]; type name[number]; };
|
||||
# define FIXED_SIZE_ARRAY(size, number, type, name) _FIXED_SIZE_ARRAY(size, number, type, name)
|
||||
#endif
|
||||
|
||||
/* The THREAD_LOCAL type attribute defines thread-local storage and is defined
|
||||
* to __thread when threads are enabled or empty when disabled.
|
||||
*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user