Imported Upstream version 1.47.0
[platform/upstream/e2fsprogs.git] / lib / ext2fs / compiler.h
index 9aa9b4e..3bb3521 100644 (file)
@@ -1,22 +1,26 @@
 #ifndef _EXT2FS_COMPILER_H
 #define _EXT2FS_COMPILER_H
 
-#ifndef __has_builtin
-#define __has_builtin(x) 0
-#endif
+#include <stddef.h>
+
+#ifdef __GNUC__
 
-#undef offsetof
-#if __has_builtin(__builtin_offsetof)
-#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
-#elif defined(__compiler_offsetof)
-#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
+#ifndef __GNUC_PREREQ
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define __GNUC_PREREQ(maj, min) \
+       ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
 #else
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#define __GNUC_PREREQ(maj, min) 0
+#endif
 #endif
 
-#define container_of(ptr, type, member) ({                     \
-       const __typeof__( ((type *)0)->member ) *__mptr = (ptr);        \
+#define container_of(ptr, type, member) ({                             \
+       __typeof__( ((type *)0)->member ) *__mptr = (ptr);      \
        (type *)( (char *)__mptr - offsetof(type,member) );})
+#else
+#define container_of(ptr, type, member)                                \
+       ((type *)((char *)(ptr) - offsetof(type, member)))
+#endif
 
 
 #endif /* _EXT2FS_COMPILER_H */