]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added mailbox_list_get_root_path() to reduce code duplication.
authorTimo Sirainen <tss@iki.fi>
Fri, 4 Jun 2010 15:51:16 +0000 (16:51 +0100)
committerTimo Sirainen <tss@iki.fi>
Fri, 4 Jun 2010 15:51:16 +0000 (16:51 +0100)
--HG--
branch : HEAD

src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/mailbox-list-private.h
src/lib-storage/mailbox-list.c

index 1238ff9898980bd13baa8b648c4688a481e72bf0..5fdd7f3c788b41a56e8ad40e9e5cda0c404372fe 100644 (file)
@@ -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));
index 9222d7e6e2195faa506e15fd60bc5321e7bac0e6..238f094ad0742a2a27a6602ebc3776b025a5f753 100644 (file)
@@ -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 &&
index 4278c17f89d3b8c24de81d55d0ca32d0f7319803..0a3d41fc2911643c382d55b6420c6b18a30d52f6 100644 (file)
@@ -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);
index 2c65e48027aac9a3e6a19632763806fa06cb2fe7..9839ed161ee289f3473be4072bb887d1fb37e180 100644 (file)
@@ -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);