diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 6d3b483..509084f 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -243,15 +243,6 @@ maildir_list_recurse( store_t *gctx, int isBox, int flags, struct dirent *de; struct stat st; - if (isBox) { - path[pathLen++] = '/'; - if (isBox > 1 || - (nfsnprintf( path + pathLen, _POSIX_PATH_MAX - pathLen, "cur" ), - !stat( path, &st ) && S_ISDIR(st.st_mode))) - add_string_list( &gctx->boxes, name ); - path[pathLen] = 0; - name[nameLen++] = '/'; - } if (!(dir = opendir( path ))) { if (isBox && (errno == ENOENT || errno == ENOTDIR)) return 0; @@ -290,6 +281,12 @@ maildir_list_recurse( store_t *gctx, int isBox, int flags, } } nl = nameLen + nfsnprintf( name + nameLen, _POSIX_PATH_MAX - nameLen, "%s", ent ); + path[pl++] = '/'; + nfsnprintf( path + pl, _POSIX_PATH_MAX - pl, "cur" ); + if (!stat( path, &st ) && S_ISDIR(st.st_mode)) + add_string_list( &gctx->boxes, name ); + path[pl] = 0; + name[nl++] = '/'; if (maildir_list_recurse( gctx, 1, flags, inbox, inboxLen, basePath, basePathLen, path, pl, name, nl ) < 0) { closedir( dir ); return -1; @@ -305,10 +302,11 @@ maildir_list_inbox( store_t *gctx, int flags, const char *basePath ) { char path[_POSIX_PATH_MAX], name[_POSIX_PATH_MAX]; + add_string_list( &gctx->boxes, "INBOX" ); return maildir_list_recurse( - gctx, 2, flags, 0, 0, basePath, basePath ? strlen( basePath ) - 1 : 0, - path, nfsnprintf( path, _POSIX_PATH_MAX, "%s", ((maildir_store_conf_t *)gctx->conf)->inbox ), - name, nfsnprintf( name, _POSIX_PATH_MAX, "INBOX" ) ); + gctx, 1, flags, 0, 0, basePath, basePath ? strlen( basePath ) - 1 : 0, + path, nfsnprintf( path, _POSIX_PATH_MAX, "%s/", ((maildir_store_conf_t *)gctx->conf)->inbox ), + name, nfsnprintf( name, _POSIX_PATH_MAX, "INBOX/" ) ); } static int