ctx->v.get_next_user = doveadm_mail_cmd_get_next_user;
if (ctx->v.deinit == NULL)
ctx->v.deinit = doveadm_mail_cmd_deinit_noop;
+ if (!doveadm_print_is_initialized()) {
+ /* alloc() should call doveadm_print_init(). It's too late
+ afterwards. */
+ doveadm_print_init_disallow(TRUE);
+ }
p_array_init(&ctx->module_contexts, ctx->pool, 5);
return ctx;
struct ostream *doveadm_print_ostream = NULL;
static struct doveadm_print_context *ctx;
+static bool doveadm_print_init_disallowed = FALSE;
bool doveadm_print_is_initialized(void)
{
/* already forced the type */
return;
}
+ if (doveadm_print_init_disallowed)
+ i_panic("doveadm_print_init() is called in wrong place");
pool = pool_alloconly_create("doveadm print", 1024);
ctx = p_new(pool, struct doveadm_print_context, 1);
i_free(hdr->sticky_value);
pool_unref(&ctx->pool);
ctx = NULL;
+
+ doveadm_print_init_disallowed = FALSE;
+}
+
+void doveadm_print_init_disallow(bool disallow)
+{
+ doveadm_print_init_disallowed = disallow;
}
void doveadm_print_init(const char *name);
void doveadm_print_deinit(void);
+/* Panic if doveadm_print_init() is attempted to be called. This is reset also
+ by doveadm_print_deinit(). */
+void doveadm_print_init_disallow(bool disallow);
void doveadm_print_formatted_set_format(const char *format);