changeset 22702:024c9456f8e5

pop3: Simplify logout format variable handling
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Mon, 04 Dec 2017 11:15:15 +0200
parents 8dcf3b113b6d
children fe760efc829a
files src/pop3/pop3-client.c
diffstat 1 files changed, 20 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/src/pop3/pop3-client.c	Mon Dec 04 11:04:09 2017 +0200
+++ b/src/pop3/pop3-client.c	Mon Dec 04 11:15:15 2017 +0200
@@ -519,46 +519,28 @@
 
 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);