From: Timo Sirainen Date: Fri, 4 Jun 2010 15:51:16 +0000 (+0100) Subject: lib-storage: Added mailbox_list_get_root_path() to reduce code duplication. X-Git-Tag: 2.0.beta6~55 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e0ca8f2484847b57e20798a9f9c7040708696a90;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Added mailbox_list_get_root_path() to reduce code duplication. --HG-- branch : HEAD --- diff --git a/src/lib-storage/list/mailbox-list-fs.c b/src/lib-storage/list/mailbox-list-fs.c index 1238ff9898..5fdd7f3c78 100644 --- a/src/lib-storage/list/mailbox-list-fs.c +++ b/src/lib-storage/list/mailbox-list-fs.c @@ -140,31 +140,11 @@ fs_list_get_path(struct mailbox_list *_list, const char *name, enum mailbox_list_path_type type) { const struct mailbox_list_settings *set = &_list->set; - const char *path, *root_dir; + const char *root_dir; if (name == NULL) { /* return root directories */ - switch (type) { - case MAILBOX_LIST_PATH_TYPE_DIR: - return set->root_dir; - case MAILBOX_LIST_PATH_TYPE_ALT_DIR: - return _list->set.alt_dir; - case MAILBOX_LIST_PATH_TYPE_MAILBOX: - path = t_strconcat(set->root_dir, "/", - set->mailbox_dir_name, NULL); - return t_strndup(path, strlen(path)-1); - case MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX: - path = t_strconcat(set->alt_dir, "/", - set->mailbox_dir_name, NULL); - return t_strndup(path, strlen(path)-1); - case MAILBOX_LIST_PATH_TYPE_CONTROL: - return set->control_dir != NULL ? - set->control_dir : set->root_dir; - case MAILBOX_LIST_PATH_TYPE_INDEX: - return set->index_dir != NULL ? - set->index_dir : set->root_dir; - } - i_unreached(); + return mailbox_list_get_root_path(set, type); } i_assert(mailbox_list_is_valid_pattern(_list, name)); diff --git a/src/lib-storage/list/mailbox-list-maildir.c b/src/lib-storage/list/mailbox-list-maildir.c index 9222d7e6e2..238f094ad0 100644 --- a/src/lib-storage/list/mailbox-list-maildir.c +++ b/src/lib-storage/list/mailbox-list-maildir.c @@ -176,21 +176,7 @@ maildir_list_get_path(struct mailbox_list *_list, const char *name, if (name == NULL) { /* return root directories */ - switch (type) { - case MAILBOX_LIST_PATH_TYPE_DIR: - case MAILBOX_LIST_PATH_TYPE_MAILBOX: - return _list->set.root_dir; - case MAILBOX_LIST_PATH_TYPE_ALT_DIR: - case MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX: - return _list->set.alt_dir; - case MAILBOX_LIST_PATH_TYPE_CONTROL: - return _list->set.control_dir != NULL ? - _list->set.control_dir : _list->set.root_dir; - case MAILBOX_LIST_PATH_TYPE_INDEX: - return _list->set.index_dir != NULL ? - _list->set.index_dir : _list->set.root_dir; - } - i_unreached(); + return mailbox_list_get_root_path(&_list->set, type); } if (_list->mail_set->mail_full_filesystem_access && diff --git a/src/lib-storage/mailbox-list-private.h b/src/lib-storage/mailbox-list-private.h index 4278c17f89..0a3d41fc29 100644 --- a/src/lib-storage/mailbox-list-private.h +++ b/src/lib-storage/mailbox-list-private.h @@ -140,6 +140,9 @@ void mailbox_lists_deinit(void); int mailbox_list_settings_parse(struct mail_user *user, const char *data, struct mailbox_list_settings *set_r, const char **error_r); +const char * +mailbox_list_get_root_path(const struct mailbox_list_settings *set, + enum mailbox_list_path_type type); int mailbox_list_delete_index_control(struct mailbox_list *list, const char *name); diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index 2c65e48027..9839ed161e 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -539,6 +539,39 @@ const char *mailbox_list_get_path(struct mailbox_list *list, const char *name, return list->v.get_path(list, name, type); } +const char * +mailbox_list_get_root_path(const struct mailbox_list_settings *set, + enum mailbox_list_path_type type) +{ + const char *path; + + switch (type) { + case MAILBOX_LIST_PATH_TYPE_DIR: + return set->root_dir; + case MAILBOX_LIST_PATH_TYPE_ALT_DIR: + return set->alt_dir; + case MAILBOX_LIST_PATH_TYPE_MAILBOX: + if (*set->mailbox_dir_name == '\0') + return set->root_dir; + path = t_strconcat(set->root_dir, "/", + set->mailbox_dir_name, NULL); + return t_strndup(path, strlen(path)-1); + case MAILBOX_LIST_PATH_TYPE_ALT_MAILBOX: + if (*set->mailbox_dir_name == '\0') + return set->root_dir; + path = t_strconcat(set->alt_dir, "/", + set->mailbox_dir_name, NULL); + return t_strndup(path, strlen(path)-1); + case MAILBOX_LIST_PATH_TYPE_CONTROL: + return set->control_dir != NULL ? + set->control_dir : set->root_dir; + case MAILBOX_LIST_PATH_TYPE_INDEX: + return set->index_dir != NULL ? + set->index_dir : set->root_dir; + } + i_unreached(); +} + const char *mailbox_list_get_temp_prefix(struct mailbox_list *list) { return list->v.get_temp_prefix(list, FALSE);