xref: /aosp_15_r20/external/e2fsprogs/lib/ext2fs/compiler.h (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
1*6a54128fSAndroid Build Coastguard Worker #ifndef _EXT2FS_COMPILER_H
2*6a54128fSAndroid Build Coastguard Worker #define _EXT2FS_COMPILER_H
3*6a54128fSAndroid Build Coastguard Worker 
4*6a54128fSAndroid Build Coastguard Worker #include <stddef.h>
5*6a54128fSAndroid Build Coastguard Worker 
6*6a54128fSAndroid Build Coastguard Worker #ifdef __GNUC__
7*6a54128fSAndroid Build Coastguard Worker 
8*6a54128fSAndroid Build Coastguard Worker #ifndef __GNUC_PREREQ
9*6a54128fSAndroid Build Coastguard Worker #if defined(__GNUC__) && defined(__GNUC_MINOR__)
10*6a54128fSAndroid Build Coastguard Worker #define __GNUC_PREREQ(maj, min) \
11*6a54128fSAndroid Build Coastguard Worker 	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
12*6a54128fSAndroid Build Coastguard Worker #else
13*6a54128fSAndroid Build Coastguard Worker #define __GNUC_PREREQ(maj, min) 0
14*6a54128fSAndroid Build Coastguard Worker #endif
15*6a54128fSAndroid Build Coastguard Worker #endif
16*6a54128fSAndroid Build Coastguard Worker 
17*6a54128fSAndroid Build Coastguard Worker #define container_of(ptr, type, member) ({				\
18*6a54128fSAndroid Build Coastguard Worker 	__typeof__( ((type *)0)->member ) *__mptr = (ptr);	\
19*6a54128fSAndroid Build Coastguard Worker 	(type *)( (char *)__mptr - offsetof(type,member) );})
20*6a54128fSAndroid Build Coastguard Worker #else
21*6a54128fSAndroid Build Coastguard Worker #define container_of(ptr, type, member)				\
22*6a54128fSAndroid Build Coastguard Worker 	((type *)((char *)(ptr) - offsetof(type, member)))
23*6a54128fSAndroid Build Coastguard Worker #endif
24*6a54128fSAndroid Build Coastguard Worker 
25*6a54128fSAndroid Build Coastguard Worker 
26*6a54128fSAndroid Build Coastguard Worker #endif /* _EXT2FS_COMPILER_H */
27