From: Timo Sirainen Date: Mon, 14 Jun 2021 20:43:11 +0000 (+0300) Subject: doveadm-server: Simplify writing log output to client X-Git-Tag: 2.3.17~348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f2033be2467a867d2f1c1edd615a07121073ddd;p=thirdparty%2Fdovecot%2Fcore.git doveadm-server: Simplify writing log output to client --- diff --git a/src/doveadm/client-connection-tcp.c b/src/doveadm/client-connection-tcp.c index 204dcd987f..ac5e69686a 100644 --- a/src/doveadm/client-connection-tcp.c +++ b/src/doveadm/client-connection-tcp.c @@ -70,7 +70,7 @@ doveadm_server_log_handler(const struct failure_context *ctx, struct ioloop *prev_ioloop = current_ioloop; struct ostream *log_out = conn->log_out; char c; - const char *ptr, *start; + const char *ptr; bool corked; va_list va; @@ -87,22 +87,23 @@ doveadm_server_log_handler(const struct failure_context *ctx, corked = o_stream_is_corked(log_out); va_copy(va, args); - string_t *str = t_str_new(128); - str_vprintfa(str, format, va); + const char *str = t_strdup_vprintf(format, va); va_end(va); - start = str_c(str); if (!corked) o_stream_cork(log_out); - while((ptr = strchr(start, '\n'))!=NULL) { - o_stream_nsend(log_out, &c, 1); - o_stream_nsend(log_out, start, ptr-start+1); - str_delete(str, 0, ptr-start+1); - } - if (str->used > 0) { + for (ptr = str;; ) { + ptr = strchr(str, '\n'); + size_t len = ptr == NULL ? strlen(str) : + (size_t)(ptr - str); + o_stream_nsend(log_out, &c, 1); - o_stream_nsend(log_out, str->data, str->used); + o_stream_nsend(log_out, str, len); o_stream_nsend(log_out, "\n", 1); + + if (ptr == NULL) + break; + str = ptr+1; } o_stream_uncork(log_out); if (corked)