added container_of macro

This commit is contained in:
Fabrice Bellard 2023-12-22 11:03:44 +01:00
parent 1692f2a7a3
commit c3599515c8
3 changed files with 5 additions and 3 deletions

View File

@ -49,6 +49,9 @@
#define countof(x) (sizeof(x) / sizeof((x)[0])) #define countof(x) (sizeof(x) / sizeof((x)[0]))
#endif #endif
/* return the pointer of type 'type *' containing 'ptr' as field 'member' */
#define container_of(ptr, type, member) ((type *)((uint8_t *)(ptr) - offsetof(type, member)))
typedef int BOOL; typedef int BOOL;
#ifndef FALSE #ifndef FALSE

3
list.h
View File

@ -36,8 +36,7 @@ struct list_head {
#define LIST_HEAD_INIT(el) { &(el), &(el) } #define LIST_HEAD_INIT(el) { &(el), &(el) }
/* return the pointer of type 'type *' containing 'el' as field 'member' */ /* return the pointer of type 'type *' containing 'el' as field 'member' */
#define list_entry(el, type, member) \ #define list_entry(el, type, member) container_of(el, type, member)
((type *)((uint8_t *)(el) - offsetof(type, member)))
static inline void init_list_head(struct list_head *head) static inline void init_list_head(struct list_head *head)
{ {

View File

@ -4064,7 +4064,7 @@ void JS_FreeCString(JSContext *ctx, const char *ptr)
if (!ptr) if (!ptr)
return; return;
/* purposely removing constness */ /* purposely removing constness */
p = (JSString *)(void *)(ptr - offsetof(JSString, u)); p = container_of(ptr, JSString, u);
JS_FreeValue(ctx, JS_MKPTR(JS_TAG_STRING, p)); JS_FreeValue(ctx, JS_MKPTR(JS_TAG_STRING, p));
} }