summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hook.c16
-rw-r--r--muttlib.c27
-rw-r--r--protos.h3
3 files changed, 36 insertions, 10 deletions
diff --git a/hook.c b/hook.c
index 120ab427..137a5616 100644
--- a/hook.c
+++ b/hook.c
@@ -545,7 +545,7 @@ void mutt_default_save (char *path, size_t pathlen, HEADER *hdr)
*path = 0;
if (mutt_addr_hook (path, pathlen, MUTT_SAVEHOOK, Context, hdr) != 0)
{
- char tmp[_POSIX_PATH_MAX];
+ BUFFER *tmp = NULL;
ADDRESS *adr;
ENVELOPE *env = hdr->env;
int fromMe = mutt_addr_is_user (env->from);
@@ -562,8 +562,10 @@ void mutt_default_save (char *path, size_t pathlen, HEADER *hdr)
adr = NULL;
if (adr)
{
- mutt_safe_path (tmp, sizeof (tmp), adr);
- snprintf (path, pathlen, "=%s", tmp);
+ tmp = mutt_buffer_pool_get ();
+ mutt_safe_path (tmp, adr);
+ snprintf (path, pathlen, "=%s", mutt_b2s (tmp));
+ mutt_buffer_pool_release (&tmp);
}
}
}
@@ -571,7 +573,7 @@ void mutt_default_save (char *path, size_t pathlen, HEADER *hdr)
void mutt_select_fcc (char *path, size_t pathlen, HEADER *hdr)
{
ADDRESS *adr;
- char buf[_POSIX_PATH_MAX];
+ BUFFER *buf = NULL;
ENVELOPE *env = hdr->env;
if (mutt_addr_hook (path, pathlen, MUTT_FCCHOOK, NULL, hdr) != 0)
@@ -580,8 +582,10 @@ void mutt_select_fcc (char *path, size_t pathlen, HEADER *hdr)
(env->to || env->cc || env->bcc))
{
adr = env->to ? env->to : (env->cc ? env->cc : env->bcc);
- mutt_safe_path (buf, sizeof (buf), adr);
- mutt_concat_path (path, NONULL(Maildir), buf, pathlen);
+ buf = mutt_buffer_pool_get ();
+ mutt_safe_path (buf, adr);
+ mutt_concat_path (path, NONULL(Maildir), mutt_b2s (buf), pathlen);
+ mutt_buffer_pool_release (&buf);
if (!option (OPTFORCENAME) && mx_access (path, W_OK) != 0)
strfcpy (path, NONULL (Outbox), pathlen);
}
diff --git a/muttlib.c b/muttlib.c
index f63c2e28..eed74ce9 100644
--- a/muttlib.c
+++ b/muttlib.c
@@ -1250,12 +1250,33 @@ void mutt_save_path (char *d, size_t dsize, ADDRESS *a)
*d = 0;
}
-void mutt_safe_path (char *s, size_t l, ADDRESS *a)
+void mutt_buffer_save_path (BUFFER *dest, ADDRESS *a)
+{
+ if (a && a->mailbox)
+ {
+ mutt_buffer_strcpy (dest, a->mailbox);
+ if (!option (OPTSAVEADDRESS))
+ {
+ char *p;
+
+ if ((p = strpbrk (dest->data, "%@")))
+ {
+ *p = 0;
+ mutt_buffer_fix_dptr (dest);
+ }
+ }
+ mutt_strlower (dest->data);
+ }
+ else
+ mutt_buffer_clear (dest);
+}
+
+void mutt_safe_path (BUFFER *dest, ADDRESS *a)
{
char *p;
- mutt_save_path (s, l, a);
- for (p = s; *p; p++)
+ mutt_buffer_save_path (dest, a);
+ for (p = dest->data; *p; p++)
if (*p == '/' || ISSPACE (*p) || !IsPrint ((unsigned char) *p))
*p = '_';
}
diff --git a/protos.h b/protos.h
index 10a15701..5a99f900 100644
--- a/protos.h
+++ b/protos.h
@@ -266,9 +266,10 @@ void mutt_print_message (HEADER *);
void mutt_print_patchlist (void);
void mutt_query_exit (void);
void mutt_query_menu (char *, size_t);
-void mutt_safe_path (char *s, size_t l, ADDRESS *a);
+void mutt_safe_path (BUFFER *dest, ADDRESS *a);
int mutt_rx_sanitize_string (BUFFER *dest, const char *src);
void mutt_save_path (char *s, size_t l, ADDRESS *a);
+void mutt_buffer_save_path (BUFFER *dest, ADDRESS *a);
void mutt_score_message (CONTEXT *, HEADER *, int);
void mutt_select_fcc (char *, size_t, HEADER *);
#define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL)