diff options
Diffstat (limited to 'mail/util.c')
-rw-r--r-- | mail/util.c | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/mail/util.c b/mail/util.c index 0475e9efd..f5471e77b 100644 --- a/mail/util.c +++ b/mail/util.c @@ -467,35 +467,21 @@ char * util_folder_path (const char *name) { char *folder; - char *tmp; - char *p; + int rc; if (mailvar_get (&folder, "folder", mailvar_type_string, 1)) return NULL; if (!name) return NULL; - if (name[0] == '+') - name++; - if (folder[0] != '/' && folder[0] != '~') - { - char *home = mu_get_homedir (); - tmp = mu_alloc (strlen (home) + 1 + - strlen (folder) + 1 + - strlen (name) + 1); - sprintf (tmp, "%s/%s/%s", home, folder, name); - } - else + rc = mu_mailbox_expand_name (name, &folder); + if (rc) { - tmp = mu_alloc (strlen (folder) + 1 + - strlen (name) + 1); - sprintf (tmp, "%s/%s", folder, name); + mu_diag_funcall (MU_DIAG_ERROR, "mailbox_expand_name", name, rc); + return NULL; } - p = util_fullpath (tmp); - free (tmp); - - return p; + return folder; } char * @@ -659,6 +645,8 @@ char * util_outfolder_name (char *str) { char *outfolder; + char *exp; + int rc; if (!str) return NULL; @@ -667,26 +655,33 @@ util_outfolder_name (char *str) { case '/': case '~': - str = util_fullpath (str); - break; - case '+': - str = util_folder_path (str); + rc = mu_mailbox_expand_name (str, &exp); + if (rc) + { + mu_diag_funcall (MU_DIAG_ERROR, "mu_mailbox_expand_name", str, rc); + return NULL; + } break; default: if (mailvar_get (&outfolder, "outfolder", mailvar_type_string, 0) == 0) { - char *ns = NULL; - mu_asprintf (&ns, "%s/%s", outfolder, str); - str = util_fullpath (ns); - free (ns); + char *s = mu_make_file_name (outfolder, str); + rc = mu_mailbox_expand_name (s, &exp); + if (rc) + { + mu_diag_funcall (MU_DIAG_ERROR, "mu_mailbox_expand_name", s, rc); + free (s); + return NULL; + } + free (s); } break; } - return mu_strdup (str); + return exp; } /* Save an outgoing message. The SAVEFILE argument overrides the setting |