diff options
author | H. Peter Anvin (Intel) <hpa@zytor.com> | 2018-12-14 00:27:59 -0800 |
---|---|---|
committer | H. Peter Anvin (Intel) <hpa@zytor.com> | 2018-12-14 00:27:59 -0800 |
commit | ce19a52a3422332d55d8c0f601f30c2e67c14f09 (patch) | |
tree | 08cddeca1c4f25196ad4ffd73ae3abbda4b1aa15 /include/compiler.h | |
parent | 374312cde4d44f8849d602cc5c9ea634798b9c50 (diff) | |
download | nasm-ce19a52a3422332d55d8c0f601f30c2e67c14f09.tar.gz |
Define and use offsetin() instead of offsetof()
New macro which defines the offset on an object rather than a
type. This macro, as far as I know, ought to be fully portable, unlike
the fallback version of offsetof().
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Diffstat (limited to 'include/compiler.h')
-rw-r--r-- | include/compiler.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/compiler.h b/include/compiler.h index 4ce60ccc..7beeb8fe 100644 --- a/include/compiler.h +++ b/include/compiler.h @@ -180,6 +180,13 @@ typedef enum bool { false, true } bool; # define offsetof(t,m) ((size_t)&(((t *)0)->m)) #endif +/* This is like offsetof(), but takes an object rather than a type. + Ironically enough this is actually guaranteed to be portable, + as far as I know... */ +#ifndef offsetin +# define offsetin(p,m) ((const char *)&((p).m) - (const char *)&(p)) +#endif + /* The container_of construct: if p is a pointer to member m of container class c, then return a pointer to the container of which *p is a member. */ |