]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
pop3: Simplify logout format variable handling
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 4 Dec 2017 09:15:15 +0000 (11:15 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 5 Dec 2017 12:53:36 +0000 (14:53 +0200)
src/pop3/pop3-client.c

index 78d35396cf09d10b0c824a0993633bdc60e606dc..bb0b67a81613356080fc149a042f44192ffb9269 100644 (file)
@@ -519,46 +519,28 @@ static const char *client_build_uidl_change_string(struct client *client)
 
 static const char *client_stats(struct client *client)
 {
-       static struct var_expand_table static_tab[] = {
-               { 'p', NULL, "top_bytes" },
-               { 't', NULL, "top_count" },
-               { 'b', NULL, "retr_bytes" },
-               { 'r', NULL, "retr_count" },
-               { 'd', NULL, "deleted_count" },
-               { 'm', NULL, "message_count" },
-               { 's', NULL, "message_bytes" },
-               { 'i', NULL, "input" },
-               { 'o', NULL, "output" },
-               { 'u', NULL, "uidl_change" },
-               { '\0', NULL, "session" },
-               { 'd', NULL, "deleted_bytes" },
+       const char *uidl_change = "";
+       if (var_has_key(client->set->pop3_logout_format,
+                       'o', "uidl_change"))
+               uidl_change = client_build_uidl_change_string(client);
+
+       const struct var_expand_table tab[] = {
+               { 'p', dec2str(client->top_bytes), "top_bytes" },
+               { 't', dec2str(client->top_count), "top_count" },
+               { 'b', dec2str(client->retr_bytes), "retr_bytes" },
+               { 'r', dec2str(client->retr_count), "retr_count" },
+               { 'd', !client->delete_success ? "0" :
+                      dec2str(client->deleted_count), "deleted_count" },
+               { 'm', dec2str(client->messages_count), "message_count" },
+               { 's', dec2str(client->total_size), "message_bytes" },
+               { 'i', dec2str(client->input->v_offset), "input" },
+               { 'o', dec2str(client->output->offset), "output" },
+               { 'u', uidl_change, "uidl_change" },
+               { '\0', client->session_id, "session" },
+               { 'd', !client->delete_success ? "0" :
+                      dec2str(client->deleted_size), "deleted_bytes" },
                { '\0', NULL, NULL }
        };
-       struct var_expand_table *tab;
-       string_t *str;
-
-       tab = t_malloc(sizeof(static_tab));
-       memcpy(tab, static_tab, sizeof(static_tab));
-
-       tab[0].value = dec2str(client->top_bytes);
-       tab[1].value = dec2str(client->top_count);
-       tab[2].value = dec2str(client->retr_bytes);
-       tab[3].value = dec2str(client->retr_count);
-       tab[4].value = client->delete_success ?
-               dec2str(client->deleted_count) : "0";
-       tab[5].value = dec2str(client->messages_count);
-       tab[6].value = dec2str(client->total_size);
-       tab[7].value = dec2str(client->input->v_offset);
-       tab[8].value = dec2str(client->output->offset);
-       if (var_has_key(client->set->pop3_logout_format,
-                       tab[9].key, tab[9].long_key))
-               tab[9].value = client_build_uidl_change_string(client);
-       else
-               tab[9].value = "";
-       tab[10].value = client->session_id;
-       tab[11].value = client->delete_success ?
-               dec2str(client->deleted_size) : "0";
-
        str = t_str_new(128);
        var_expand(str, client->set->pop3_logout_format, tab);
        return str_c(str);