Messages in this thread Patch in this message | | | From | Ammar Faizi <> | Subject | [PATCH v2 6/9] tools/nolibc/types: Implement `offsetof()` and `container_of()` macro | Date | Tue, 29 Mar 2022 17:17:34 +0700 |
| |
Implement `offsetof()` and `container_of()` macro. The first use case of these macros is for `malloc()`, `realloc()` and `free()`.
Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org> === @@ Changelog:
Link v1: https://lore.gnuweeb.org/gwml/20220324073039.140946-9-ammarfaizi2@gnuweeb.org v1 -> v2: * No changes *
Link RFC v2: https://lore.kernel.org/lkml/20220322102115.186179-6-ammarfaizi2@gnuweeb.org RFC v2 -> v1: * No changes *
Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org> --- tools/include/nolibc/types.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/tools/include/nolibc/types.h b/tools/include/nolibc/types.h index 357e60ad38a8..959997034e55 100644 --- a/tools/include/nolibc/types.h +++ b/tools/include/nolibc/types.h @@ -191,4 +191,15 @@ struct stat { #define major(dev) ((unsigned int)(((dev) >> 8) & 0xfff)) #define minor(dev) ((unsigned int)(((dev) & 0xff)) +#ifndef offsetof +#define offsetof(TYPE, FIELD) ((size_t) &((TYPE *)0)->FIELD) +#endif + +#ifndef container_of +#define container_of(PTR, TYPE, FIELD) ({ \ + __typeof__(((TYPE *)0)->FIELD) *__FIELD_PTR = (PTR); \ + (TYPE *)((char *) __FIELD_PTR - offsetof(TYPE, FIELD)); \ +}) +#endif + #endif /* _NOLIBC_TYPES_H */ -- Ammar Faizi
| |