diff --git a/lib/mu-maildir.c b/lib/mu-maildir.c index 07f27377..a6bb9a33 100644 --- a/lib/mu-maildir.c +++ b/lib/mu-maildir.c @@ -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 */ } }