]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Add MODULE_CONTEXT_REQUIRE
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 12 Jan 2018 13:10:48 +0000 (15:10 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 18 Jan 2018 08:41:16 +0000 (10:41 +0200)
This will panic instead of return NULL. Should satisfy static
analyzers when used.

src/lib/module-context.h

index cc6bd8a2c7ff3fa5099fe98926e95ef27a051435..13005f55df14b241c3b3a28119626629ef8f84ee 100644 (file)
                module_get_context_id(&(id_ctx).id)) + \
            OBJ_REGISTER_COMPATIBLE(obj, id_ctx))) : NULL)
 
+/* 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 { \