diff options
-rw-r--r-- | hook.c | 16 | ||||
-rw-r--r-- | muttlib.c | 27 | ||||
-rw-r--r-- | protos.h | 3 |
3 files changed, 36 insertions, 10 deletions
@@ -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); } @@ -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 = '_'; } @@ -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) |