From: Timo Sirainen Date: Wed, 10 Mar 2021 11:50:00 +0000 (+0200) Subject: lib: event_logv() - Make sure errno is preserved X-Git-Tag: 2.3.15~250 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3a6ec2997ac8ff59d1102a5e7e0a1f4538a3b5d4;p=thirdparty%2Fdovecot%2Fcore.git lib: event_logv() - Make sure errno is preserved It already should have been, but this change makes it clearer and more future-safe. --- diff --git a/src/lib/event-log.c b/src/lib/event-log.c index d62d0efd16..8564497a81 100644 --- a/src/lib/event-log.c +++ b/src/lib/event-log.c @@ -300,7 +300,6 @@ event_logv_params(struct event *event, const struct event_log_params *params, .type = params->log_type, }; bool abort_after_event = FALSE; - int old_errno = errno; i_assert(!params->no_send || params->base_str_out != NULL); @@ -344,7 +343,6 @@ event_logv_params(struct event *event, const struct event_log_params *params, } if (abort_after_event) abort(); - errno = old_errno; } void event_logv(struct event *event, const struct event_log_params *params, @@ -352,6 +350,7 @@ void event_logv(struct event *event, const struct event_log_params *params, { const char *orig_source_filename = event->source_filename; unsigned int orig_source_linenum = event->source_linenum; + int old_errno = errno; if (params->source_filename != NULL) { event_set_source(event, params->source_filename, @@ -367,6 +366,7 @@ void event_logv(struct event *event, const struct event_log_params *params, event_set_source(event, orig_source_filename, orig_source_linenum, TRUE); event_unref(&event); + errno = old_errno; } struct event *event_set_forced_debug(struct event *event, bool force) diff --git a/src/lib/test-event-log.c b/src/lib/test-event-log.c index 99c9b6a941..1be4c9ee1e 100644 --- a/src/lib/test-event-log.c +++ b/src/lib/test-event-log.c @@ -2503,6 +2503,7 @@ static void test_event_log_level(void) struct event *event = event_create(NULL); event_set_min_log_level(event, LOG_TYPE_WARNING); + errno = EACCES; e_info(event, "Info event"); test_assert(test_output == NULL); e_warning(event, "Warning event"); @@ -2511,6 +2512,7 @@ static void test_event_log_level(void) i_set_info_handler(orig_info); i_set_error_handler(orig_error); i_free(test_output); + test_assert(errno == EACCES); test_end(); }