From 15989609ffafc5b5eef4dbde49419842a8b249fd Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Fri, 11 Apr 2025 09:35:22 -0600 Subject: libmisc: LM_CAST_FIELD_TO_STRUCT: Allow the pointer to be NULL --- libmisc/include/libmisc/macro.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'libmisc') diff --git a/libmisc/include/libmisc/macro.h b/libmisc/include/libmisc/macro.h index 4591b68..6cb15fb 100644 --- a/libmisc/include/libmisc/macro.h +++ b/libmisc/include/libmisc/macro.h @@ -18,11 +18,12 @@ #define LM_ARRAY_LEN(ary) (sizeof(ary)/sizeof((ary)[0])) -#define LM_CAST_FIELD_TO_STRUCT(STRUCT_TYP, FIELD_NAME, PTR_TO_FIELD) ({ \ - /* The _fptr assignment is to get the compiler to do type checking. */ \ - typeof(((STRUCT_TYP *)NULL)->FIELD_NAME) *_fptr = (PTR_TO_FIELD); \ - assert(_fptr); \ - ((STRUCT_TYP*)( ((void*)_fptr) - offsetof(STRUCT_TYP, FIELD_NAME))); \ +#define LM_CAST_FIELD_TO_STRUCT(STRUCT_TYP, FIELD_NAME, PTR_TO_FIELD) ({ \ + /* The _fptr assignment is to get the compiler to do type checking. */ \ + typeof(((STRUCT_TYP *)NULL)->FIELD_NAME) *_fptr = (PTR_TO_FIELD); \ + _fptr \ + ? ((STRUCT_TYP*)( ((void*)_fptr) - offsetof(STRUCT_TYP, FIELD_NAME))) \ + : NULL; \ }) /* numeric */ -- cgit v1.2.3-2-g168b