From: Marco Bettini Date: Fri, 22 Sep 2023 08:56:17 +0000 (+0000) Subject: lib-index: Add mail_index_set_error_code() X-Git-Tag: 2.4.0~2557 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e39d1f1022fb4dae5df05445a41e3742262b2be;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Add mail_index_set_error_code() --- diff --git a/src/lib-index/mail-index-private.h b/src/lib-index/mail-index-private.h index 722f4a20ca..5320bd53f4 100644 --- a/src/lib-index/mail-index-private.h +++ b/src/lib-index/mail-index-private.h @@ -420,6 +420,10 @@ void mail_index_fsck_locked(struct mail_index *index); with mail_index_get_error_message(). */ void mail_index_set_error(struct mail_index *index, const char *fmt, ...) ATTR_FORMAT(2, 3) ATTR_COLD; +void mail_index_set_error_code(struct mail_index *index, + enum mail_index_error_code code, + const char *fmt, ...) + ATTR_FORMAT(3, 4) ATTR_COLD; /* Same as mail_index_set_error(), but don't log the error. */ void mail_index_set_error_nolog(struct mail_index *index, const char *str) ATTR_COLD; diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 0dec3f69bf..4f345a7ce7 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -876,23 +876,38 @@ struct mail_cache *mail_index_get_cache(struct mail_index *index) return index->cache; } -void mail_index_set_error(struct mail_index *index, const char *fmt, ...) +static void ATTR_FORMAT(2,0) +mail_index_set_verror(struct mail_index *index, const char *fmt, va_list args) { - va_list va; - i_free(index->last_error.text); if (fmt == NULL) index->last_error.text = NULL; else { - va_start(va, fmt); - index->last_error.text = i_strdup_vprintf(fmt, va); - va_end(va); - + index->last_error.text = i_strdup_vprintf(fmt, args); e_error(index->event, "%s", index->last_error.text); } } +void mail_index_set_error(struct mail_index *index, const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + mail_index_set_verror(index, fmt, args); + va_end(args); +} + +void mail_index_set_error_code(struct mail_index *index, + enum mail_index_error_code code, + const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + mail_index_set_verror(index, fmt, args); + index->last_error.code = code; + va_end(args); +} + void mail_index_set_error_nolog(struct mail_index *index, const char *str) { i_assert(str != NULL);