Browse Source

make maildir_list_recurse() recursion less convoluted

move the unconditional addition of INBOX out ouf the function.
this makes it possible to move the folder check and addition to the
listing before the recursion, which seems clearer.
wip/server-refactor
Oswald Buddenhagen 10 years ago
parent
commit
064f579a92
  1. 22
      src/drv_maildir.c

22
src/drv_maildir.c

@ -243,15 +243,6 @@ maildir_list_recurse( store_t *gctx, int isBox, int flags,
struct dirent *de; struct dirent *de;
struct stat st; 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 (!(dir = opendir( path ))) {
if (isBox && (errno == ENOENT || errno == ENOTDIR)) if (isBox && (errno == ENOENT || errno == ENOTDIR))
return 0; 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 ); 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) { if (maildir_list_recurse( gctx, 1, flags, inbox, inboxLen, basePath, basePathLen, path, pl, name, nl ) < 0) {
closedir( dir ); closedir( dir );
return -1; 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]; char path[_POSIX_PATH_MAX], name[_POSIX_PATH_MAX];
add_string_list( &gctx->boxes, "INBOX" );
return maildir_list_recurse( return maildir_list_recurse(
gctx, 2, flags, 0, 0, basePath, basePath ? strlen( basePath ) - 1 : 0, 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 ), path, nfsnprintf( path, _POSIX_PATH_MAX, "%s/", ((maildir_store_conf_t *)gctx->conf)->inbox ),
name, nfsnprintf( name, _POSIX_PATH_MAX, "INBOX" ) ); name, nfsnprintf( name, _POSIX_PATH_MAX, "INBOX/" ) );
} }
static int static int

Loading…
Cancel
Save