diff --git a/src/lib-sieve/sieve-error-private.h b/src/lib-sieve/sieve-error-private.h index fa0793b0ae51e19d3118d01686c2afd094672d93..da055cb65847024129b133d4b7de44693eaced4d 100644 --- a/src/lib-sieve/sieve-error-private.h +++ b/src/lib-sieve/sieve-error-private.h @@ -40,6 +40,10 @@ struct sieve_error_handler { void sieve_error_handler_init (struct sieve_error_handler *ehandler, pool_t pool, unsigned int max_errors); +void sieve_error_handler_init_from_parent + (struct sieve_error_handler *ehandler, pool_t pool, + struct sieve_error_handler *parent); + /* * Direct handler calls */ diff --git a/src/lib-sieve/sieve-error.c b/src/lib-sieve/sieve-error.c index 2c5512cfda9a71138b3c5b5f2cb299879f132e64..c6be9094c359ac3f2d1ccc207e8dcff3e4b06baf 100644 --- a/src/lib-sieve/sieve-error.c +++ b/src/lib-sieve/sieve-error.c @@ -245,7 +245,7 @@ void sieve_error_handler_copy_masterlog */ void sieve_error_handler_init - (struct sieve_error_handler *ehandler, pool_t pool, unsigned int max_errors) +(struct sieve_error_handler *ehandler, pool_t pool, unsigned int max_errors) { ehandler->pool = pool; ehandler->refcount = 1; @@ -255,6 +255,18 @@ void sieve_error_handler_init ehandler->warnings = 0; } +void sieve_error_handler_init_from_parent +(struct sieve_error_handler *ehandler, pool_t pool, struct sieve_error_handler *parent) +{ + i_assert( parent != NULL ); + + sieve_error_handler_init(ehandler, pool, parent->max_errors); + + ehandler->handler.log_master = parent->log_master; + ehandler->handler.log_info = parent->log_info; + ehandler->handler.log_debug = parent->log_debug; +} + void sieve_error_handler_ref(struct sieve_error_handler *ehandler) { if ( ehandler == NULL || ehandler->pool == NULL ) return; @@ -881,9 +893,7 @@ struct sieve_error_handler *sieve_prefix_ehandler_create ehandler->location = p_strdup(pool, location); ehandler->prefix = p_strdup(pool, prefix); - sieve_error_handler_init(&ehandler->handler, pool, parent->max_errors); - ehandler->handler.log_info = parent->log_info; - ehandler->handler.log_debug = parent->log_debug; + sieve_error_handler_init_from_parent(&ehandler->handler, pool, parent); ehandler->handler.verror = sieve_prefix_verror; ehandler->handler.vwarning = sieve_prefix_vwarning; @@ -1002,9 +1012,7 @@ struct sieve_error_handler *sieve_varexpand_ehandler_create ehandler->format = format; p_array_init(&ehandler->table, pool, 10); - sieve_error_handler_init(&ehandler->handler, pool, parent->max_errors); - ehandler->handler.log_info = parent->log_info; - ehandler->handler.log_debug = parent->log_debug; + sieve_error_handler_init_from_parent(&ehandler->handler, pool, parent); entry = array_append_space(&ehandler->table); entry->key = '$';