Merge pull request #1813 from juanjosegarciaripoll/fix-renaming-separator

mu_maildir_get_new_path() did not use the right flags separator
This commit is contained in:
Dirk-Jan C. Binnema 2020-10-16 21:35:35 +03:00 committed by GitHub
commit 5cd6226ebd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 31 additions and 18 deletions

View File

@ -779,12 +779,24 @@ get_new_basename (void)
g_get_host_name ());
}
static char*
find_path_separator(const char *path)
{
const char *cur;
for (cur = &path[strlen(path)-1]; cur > path; --cur) {
if ((*cur == ':' || *cur == '!' || *cur == ';') &&
(cur[1] == '2' && cur[2] == ',')) {
return (char*)cur;
}
}
return NULL;
}
char*
mu_maildir_get_new_path (const char *oldpath, const char *new_mdir,
MuFlags newflags, gboolean new_name)
{
char *mfile, *mdir, *custom_flags, *newpath, flags_sep = ':';
char *mfile, *mdir, *custom_flags, *cur, *newpath, flags_sep = ':';
g_return_val_if_fail (oldpath, NULL);
@ -795,25 +807,26 @@ mu_maildir_get_new_path (const char *oldpath, const char *new_mdir,
if (!mdir)
return NULL;
if (new_name)
/* determine the name of the location of the flag separator */
if (new_name) {
mfile = get_new_basename ();
else {
/* determine the name of the mailfile, stripped of its flags, as
* well as any custom (non-standard) flags */
char *cur;
cur = find_path_separator (oldpath);
if (cur) {
/* preserve the existing flags separator
* in the new file name */
flags_sep = *cur;
}
} else {
mfile = g_path_get_basename (oldpath);
for (cur = &mfile[strlen(mfile)-1]; cur > mfile; --cur) {
if ((*cur == ':' || *cur == '!' || *cur == ';') &&
(cur[1] == '2' && cur[2] == ',')) {
/* get the custom flags (if any) */
custom_flags =
mu_flags_custom_from_str (cur + 3);
/* preserve the existing flags separator
* in the new file name */
flags_sep = *cur;
cur[0] = '\0'; /* strip the flags */
break;
}
cur = find_path_separator (mfile);
if (cur) {
/* get the custom flags (if any) */
custom_flags = mu_flags_custom_from_str (cur + 3);
/* preserve the existing flags separator
* in the new file name */
flags_sep = *cur;
cur[0] = '\0'; /* strip the flags */
}
}