From 9e39d1f1022fb4dae5df05445a41e3742262b2be Mon Sep 17 00:00:00 2001 From: Marco Bettini Date: Fri, 22 Sep 2023 08:56:17 +0000 Subject: [PATCH] lib-index: Add mail_index_set_error_code() --- src/lib-index/mail-index-private.h | 4 ++++ src/lib-index/mail-index.c | 29 ++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) 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); -- 2.47.3