summaryrefslogtreecommitdiff
path: root/libmailutils/mailbox/fsfolder.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmailutils/mailbox/fsfolder.c')
-rw-r--r--libmailutils/mailbox/fsfolder.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libmailutils/mailbox/fsfolder.c b/libmailutils/mailbox/fsfolder.c
index 805aea626..5bf0c394b 100644
--- a/libmailutils/mailbox/fsfolder.c
+++ b/libmailutils/mailbox/fsfolder.c
@@ -1,5 +1,5 @@
/* Implementation of file-system folder for GNU Mailutils
- Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ Copyright (C) 1999-2024 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -146,7 +146,7 @@ _fsfolder_close (mu_folder_t folder MU_ARG_UNUSED)
static int
_fsfolder_rename (mu_folder_t folder, const char *oldpath,
- const char *newpath)
+ const char *newpath)
{
struct _mu_fsfolder *fsfolder = folder->data;
if (oldpath && newpath)
@@ -188,6 +188,7 @@ struct folder_scan_data
mu_folder_t folder;
char *dirname;
size_t dirlen;
+ size_t prefix_len;
size_t errcnt;
};
@@ -376,7 +377,7 @@ list_helper (struct mu_folder_scanner *scn,
}
else
{
- resp->name = fname;
+ resp->name = strdup (fname + data->prefix_len + 1);
resp->depth = depth;
resp->separator = '/';
resp->type = type;
@@ -386,8 +387,7 @@ list_helper (struct mu_folder_scanner *scn,
{
if (scn->enumfun (data->folder, resp, scn->enumdata))
{
- free (resp->name);
- free (resp);
+ mu_list_response_free (resp);
stop = 1;
break;
}
@@ -409,7 +409,7 @@ list_helper (struct mu_folder_scanner *scn,
fname = NULL;
}
else
- free (resp);
+ mu_list_response_free (resp);
}
if ((type & MU_FOLDER_ATTRIBUTE_DIRECTORY)
@@ -458,6 +458,9 @@ _fsfolder_list (mu_folder_t folder, struct mu_folder_scanner *scn)
sdata.folder = folder;
sdata.dirname = get_pathname (fsfolder->dirname, scn->refname);
sdata.dirlen = strlen (sdata.dirname);
+ sdata.prefix_len = strlen (fsfolder->dirname);
+ if (sdata.prefix_len > 0 && fsfolder->dirname[sdata.prefix_len-1] == '/')
+ sdata.prefix_len--;
sdata.errcnt = 0;
list_helper (scn, &sdata, &iroot, sdata.dirname, 0);
free (sdata.dirname);

Return to:

Send suggestions and report system problems to the System administrator.