Mercurial > dovecot > original-hg > dovecot-1.2
changeset 5314:ce59b45431fb HEAD
Use less memory when listing lots of mailboxes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 15 Mar 2007 03:25:03 +0200 |
parents | f17cd7735f8d |
children | 7d0469858e6d |
files | src/imap/cmd-list.c |
diffstat | 1 files changed, 22 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-list.c Thu Mar 15 03:24:15 2007 +0200 +++ b/src/imap/cmd-list.c Thu Mar 15 03:25:03 2007 +0200 @@ -27,12 +27,10 @@ unsigned int match_inbox:1; }; -static const char * -mailbox_flags2str(enum mailbox_info_flags flags, +static void +mailbox_flags2str(string_t *str, enum mailbox_info_flags flags, enum mailbox_list_flags list_flags) { - const char *str; - if ((flags & MAILBOX_NONEXISTENT) != 0 && (list_flags & _MAILBOX_LIST_ITER_LISTEXT) == 0) { flags |= MAILBOX_NOSELECT; @@ -42,17 +40,20 @@ if ((list_flags & _MAILBOX_LIST_ITER_HIDE_CHILDREN) != 0) flags &= ~(MAILBOX_CHILDREN|MAILBOX_NOCHILDREN); - str = t_strconcat( - (flags & MAILBOX_NOSELECT) ? " \\Noselect" : "", - (flags & MAILBOX_NONEXISTENT) ? " \\NonExistent" : "", - (flags & MAILBOX_CHILDREN) ? " \\HasChildren" : "", - (flags & MAILBOX_NOCHILDREN) ? " \\HasNoChildren" : "", - (flags & MAILBOX_NOINFERIORS) ? " \\NoInferiors" : "", - (flags & MAILBOX_MARKED) ? " \\Marked" : "", - (flags & MAILBOX_UNMARKED) ? " \\UnMarked" : "", - NULL); - - return *str == '\0' ? "" : str+1; + if ((flags & MAILBOX_NOSELECT) != 0) + str_append(str, " \\Noselect"); + if ((flags & MAILBOX_NONEXISTENT) != 0) + str_append(str, " \\NonExistent"); + if ((flags & MAILBOX_CHILDREN) != 0) + str_append(str, " \\HasChildren"); + if ((flags & MAILBOX_NOCHILDREN) != 0) + str_append(str, " \\HasNoChildren"); + if ((flags & MAILBOX_NOINFERIORS) != 0) + str_append(str, " \\NoInferiors"); + if ((flags & MAILBOX_MARKED) != 0) + str_append(str, " \\Marked"); + if ((flags & MAILBOX_UNMARKED) != 0) + str_append(str, " \\UnMarked"); } static bool @@ -158,10 +159,9 @@ } str_truncate(str, 0); - str_printfa(str, "* %s (%s) \"%s\" ", - ctx->lsub ? "LSUB" : "LIST", - mailbox_flags2str(info->flags, ctx->list_flags), - ctx->ns->sep_str); + str_printfa(str, "* %s (", ctx->lsub ? "LSUB" : "LIST"); + mailbox_flags2str(str, info->flags, ctx->list_flags); + str_printfa(str, ") \"%s\" ", ctx->ns->sep_str); imap_quote_append_string(str, name, FALSE); if (client_send_line(client, str_c(str)) == 0) { /* buffer is full, continue later */ @@ -324,9 +324,9 @@ string_t *str = t_str_new(128); flags = MAILBOX_NONEXISTENT | MAILBOX_CHILDREN; - str_printfa(str, "* LIST (%s) \"%s\" ", - mailbox_flags2str(flags, ctx->list_flags), - ns->sep_str); + str_append(str, "* LIST ("); + mailbox_flags2str(str, flags, ctx->list_flags); + str_printfa(str, ") \"%s\" ", ns->sep_str); imap_quote_append_string(str, skip_trailing_sep ? t_strndup(ns->prefix, len-1) : ns->prefix, FALSE);