]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: server: Use smtp_server_reply_submit_duplicate() in smtp_server_reply_allv().
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 13 Jan 2018 12:10:53 +0000 (13:10 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 18 Jan 2018 07:10:12 +0000 (09:10 +0200)
This is more efficient, since it doesn't need to compose new content for each
reply.

src/lib-smtp/smtp-server-reply.c

index 8c687c0e5253034dcd2682400b16fc2815f23978..99eccf28b09e54e0f7070c142a3e450b838460c0 100644 (file)
@@ -293,7 +293,7 @@ smtp_server_reply_allv(struct smtp_server_cmd_ctx *_cmd,
        struct smtp_server_command *cmd = _cmd->cmd;
        struct smtp_server_reply *reply;
        const char *text;
-       unsigned int i = 0;
+       unsigned int first, i = 0;
 
        /* find the first unsent reply */
        if (array_is_created(&cmd->replies)) {
@@ -305,17 +305,19 @@ smtp_server_reply_allv(struct smtp_server_cmd_ctx *_cmd,
                }
                i_assert (i < cmd->replies_expected);
        }
+       first = i++;
 
        /* compose the reply text */
        text = t_strdup_vprintf(fmt, args);
 
-       /* submit remaining replies */
-       for (; i < cmd->replies_expected; i++) {
-               reply = smtp_server_reply_create_index(cmd,
-                       i, status, enh_code);
-               smtp_server_reply_add_text(reply, text);
-               smtp_server_reply_submit(reply);
-       }
+       /* submit the first remaining reply */
+       reply = smtp_server_reply_create_index(cmd, first, status, enh_code);
+       smtp_server_reply_add_text(reply, text);
+       smtp_server_reply_submit(reply);
+
+       /* duplicate the rest from it */
+       for (; i < cmd->replies_expected; i++)
+               smtp_server_reply_submit_duplicate(_cmd, i, first);
 }
 
 void smtp_server_reply_all(struct smtp_server_cmd_ctx *_cmd,