]> 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)
committerMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Tue, 20 Feb 2018 12:20:02 +0000 (14:20 +0200)
This will panic instead of return NULL. Should satisfy static
analyzers when used.

src/lib/module-context.h

index 1916a174f72a435fd6da7c1f336a13b1c05d8839..4ab590eab8d90bad41e7d86bbe2377a227b4eb9b 100644 (file)
                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 { \