From 6dc4841f5079aa769b45f085785fb3fa6762b4c8 Mon Sep 17 00:00:00 2001 From: Bron Gondwana Date: Tue, 28 Jul 2009 10:55:24 +1000 Subject: [PATCH] Add mboxlist_count_inferiors interface --- imap/mboxlist.c | 33 +++++++++++++++++++++++++++++++++ imap/mboxlist.h | 5 +++++ 2 files changed, 38 insertions(+), 0 deletions(-) diff --git a/imap/mboxlist.c b/imap/mboxlist.c index b87ad7d..0ca5eeb 100644 --- a/imap/mboxlist.c +++ b/imap/mboxlist.c @@ -3445,3 +3445,36 @@ int mboxlist_delayed_delete_isenabled(void) return(config_delete_mode == IMAP_ENUM_DELETE_MODE_DELAYED); } + +/* Callback used by mboxlist_count_inferiors below */ +static int +mboxlist_count_addmbox(char *name __attribute__((unused)), + int matchlen __attribute__((unused)), + int maycreate __attribute__((unused)), + void *rock) +{ + int *count = (int *)rock; + + *count++; + + return 0; +} + +/* Count how many children a mailbox has */ +int +mboxlist_count_inferiors(char *mailboxname, int isadmin, char *userid, + struct auth_state *authstate) +{ + int count = 0; + char mailboxname2[MAX_MAILBOX_NAME+1]; + char *p; + + strcpy(mailboxname2, mailboxname); + p = mailboxname2 + strlen(mailboxname2); /* end of mailboxname */ + strcpy(p, ".*"); + + mboxlist_findall(NULL, mailboxname2, isadmin, userid, + authstate, mboxlist_count_addmbox, &count); + + return(count); +} diff --git a/imap/mboxlist.h b/imap/mboxlist.h index 38d1667..bee08a2 100644 --- a/imap/mboxlist.h +++ b/imap/mboxlist.h @@ -216,4 +216,9 @@ int mboxlist_commit(struct txn *tid); int mboxlist_abort(struct txn *tid); int mboxlist_delayed_delete_isenabled(void); + +/* Small utility routine for limit_user_folders */ +int mboxlist_count_inferiors(char *mailboxname, int isadmin, char *userid, + struct auth_state *authstate); + #endif -- 1.5.6.5