summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmailutils/base/registrar.c2
-rw-r--r--libproto/mh/folder.c23
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;

Return to:

Send suggestions and report system problems to the System administrator.