diff options
-rw-r--r-- | libmailutils/base/registrar.c | 2 | ||||
-rw-r--r-- | libproto/mh/folder.c | 23 |
2 files changed, 22 insertions, 3 deletions
diff --git a/libmailutils/base/registrar.c b/libmailutils/base/registrar.c index e1d8a4371..da736a07f 100644 --- a/libmailutils/base/registrar.c +++ b/libmailutils/base/registrar.c @@ -342,8 +342,6 @@ mu_record_get_folder (mu_record_t record, int (*(*_pfolder)) (mu_folder_t)) int mu_record_list_p (mu_record_t record, const char *name, int flags) { - if (record == NULL) - return EINVAL; return record == NULL || !record->_list_p || record->_list_p (record, name, flags); diff --git a/libproto/mh/folder.c b/libproto/mh/folder.c index dc4516665..6c034b367 100644 --- a/libproto/mh/folder.c +++ b/libproto/mh/folder.c @@ -60,6 +60,24 @@ mh_dir_p (const char *name) while (!result && (entry = readdir (dir))) { + char *pname; + struct stat st; + int rc; + + if (entry->d_name[0] == '.' + && (entry->d_name[1] == 0 + || (entry->d_name[1] == '.' && entry->d_name[2] == 0))) + continue; + + pname = mu_make_file_name (name, entry->d_name); + if (!pname) + continue; + + rc = stat (pname, &st); + free (pname); + if (rc || !S_ISREG (st.st_mode)) + continue; + switch (entry->d_name[0]) { case '.': @@ -119,13 +137,16 @@ _mh_is_scheme (mu_record_t record, mu_url_t url, int flags) } static int -_mh_list_p (mu_record_t record, const char *name, int flags MU_ARG_UNUSED) +_mh_list_p (mu_record_t record, const char *name, int flags) { if (name[0] == ',' || ((strlen (name) > 3) && (memcmp (name, ".mh", 3) == 0 || memcmp (name, ".mu", 3) == 0))) return 0; + if (flags == MU_FOLDER_ATTRIBUTE_DIRECTORY) + return 1; + for (; *name; name++) if (!mu_isdigit (*name)) return 1; |