diff options
Diffstat (limited to 'libmailutils/mailbox/fsfolder.c')
-rw-r--r-- | libmailutils/mailbox/fsfolder.c | 15 |
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); |