]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm-server: Simplify writing log output to client
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 14 Jun 2021 20:43:11 +0000 (23:43 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 2 Jul 2021 08:41:47 +0000 (08:41 +0000)
src/doveadm/client-connection-tcp.c

index 204dcd987fb2e84966c4c024f2b5bbc4f1a660cb..ac5e69686ad6c965b2d0a5837a5ad99b7254c95b 100644 (file)
@@ -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)