# HG changeset patch # User Timo Sirainen # Date 1047204215 -7200 # Node ID ddb4ebbf32a9d59b38c69df5f1d13f929477c7eb # Parent 9562ba6af1f13934aff6e4b71f5957a1d852bcec mbox: LIST "" invalid-directory/% doesn't anymore give internal error diff -r 9562ba6af1f1 -r ddb4ebbf32a9 src/lib-storage/index/mbox/mbox-list.c --- a/src/lib-storage/index/mbox/mbox-list.c Sun Mar 09 11:56:05 2003 +0200 +++ b/src/lib-storage/index/mbox/mbox-list.c Sun Mar 09 12:03:35 2003 +0200 @@ -72,8 +72,9 @@ if (*dirp != NULL) return 1; - if (!root && (errno == ENOENT || errno == ENOTDIR)) { - /* probably just race condition with other client + if (errno == ENOENT || errno == ENOTDIR) { + /* root) user gave invalid hiearchy, ignore + sub) probably just race condition with other client deleting the mailbox. */ return 0; } @@ -128,9 +129,11 @@ virtual_path = mask_get_dir(mask); path = mbox_get_path(storage, virtual_path); - if (list_opendir(storage, path, TRUE, &dirp) <= 0) + if (list_opendir(storage, path, TRUE, &dirp) < 0) return NULL; + /* if user gave invalid directory, we just don't show any results. */ + ctx = i_new(struct mailbox_list_context, 1); ctx->storage = storage; ctx->flags = flags; @@ -139,15 +142,17 @@ if (virtual_path == NULL && imap_match(ctx->glob, "INBOX") > 0) ctx->next = mbox_list_inbox; - else if (virtual_path != NULL) + else if (virtual_path != NULL && dirp != NULL) ctx->next = mbox_list_path; else ctx->next = mbox_list_next; - ctx->dir = i_new(struct list_dir_context, 1); - ctx->dir->dirp = dirp; - ctx->dir->real_path = i_strdup(path); - ctx->dir->virtual_path = i_strdup(virtual_path); + if (dirp != NULL) { + ctx->dir = i_new(struct list_dir_context, 1); + ctx->dir->dirp = dirp; + ctx->dir->real_path = i_strdup(path); + ctx->dir->virtual_path = i_strdup(virtual_path); + } return ctx; }