Mercurial > dovecot > original-hg > dovecot-1.2
changeset 5804:c7f35a9beb0b HEAD
Store namespaces sorted by their prefix length.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 27 Jun 2007 16:24:50 +0300 |
parents | 6ae0dc6dc3b3 |
children | 3fd09104fd77 |
files | src/lib-storage/mail-namespace.c src/lib-storage/mail-namespace.h |
diffstat | 2 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-namespace.c Wed Jun 27 16:10:00 2007 +0300 +++ b/src/lib-storage/mail-namespace.c Wed Jun 27 16:24:50 2007 +0300 @@ -140,6 +140,24 @@ return TRUE; } +static struct mail_namespace * +namespaces_sort(struct mail_namespace *src) +{ + struct mail_namespace **tmp, *next, *dest = NULL; + + for (; src != NULL; src = next) { + next = src->next; + + for (tmp = &dest; *tmp != NULL; tmp = &(*tmp)->next) { + if (strlen(src->prefix) < strlen((*tmp)->prefix)) + break; + } + src->next = *tmp; + *tmp = src; + } + return dest; +} + int mail_namespaces_init(pool_t pool, const char *user, struct mail_namespace **namespaces_r) { @@ -175,6 +193,7 @@ if (namespaces != NULL) { if (!namespaces_check(namespaces)) return -1; + namespaces = namespaces_sort(namespaces); *namespaces_r = namespaces; return 0; }
--- a/src/lib-storage/mail-namespace.h Wed Jun 27 16:10:00 2007 +0300 +++ b/src/lib-storage/mail-namespace.h Wed Jun 27 16:24:50 2007 +0300 @@ -8,6 +8,7 @@ }; struct mail_namespace { + /* Namespaces are sorted by their prefix length, "" comes first */ struct mail_namespace *next; enum namespace_type type;