From bf055b4cb39d7ffa06fb650a3f771b2fa45bc873 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Fri, 12 Jan 2018 15:10:48 +0200 Subject: [PATCH] lib: Add MODULE_CONTEXT_REQUIRE This will panic instead of return NULL. Should satisfy static analyzers when used. --- src/lib/module-context.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lib/module-context.h b/src/lib/module-context.h index 1916a174f7..4ab590eab8 100644 --- a/src/lib/module-context.h +++ b/src/lib/module-context.h @@ -50,6 +50,15 @@ module_get_context_id(&(id_ctx).id)) + \ OBJ_REGISTER_COMPATIBLE(obj, id_ctx))) +/* Will crash if context is missing. This is mainly used to simplify code and + keep static analyzers happy. This syntax discards result of i_panic and + returns NULL instead to keep compilers happy. */ +#define MODULE_CONTEXT_REQUIRE(obj, id_ctx) \ + (module_get_context_id(&(id_ctx).id) < array_count(&(obj)->module_contexts) ? \ + (*((void **)array_idx_modifiable(&(obj)->module_contexts, \ + module_get_context_id(&(id_ctx).id)) + \ + OBJ_REGISTER_COMPATIBLE(obj, id_ctx))) : (i_panic("Module context " #id_ctx " missing"), NULL)) + #ifdef HAVE_TYPEOF # define MODULE_CONTEXT_DEFINE(_name, _reg) \ struct _name { \ -- 2.47.3