]> granicus.if.org Git - mutt/commitdiff
Convert save-hook and fcc-hook to use buffer pool internally.
authorKevin McCarthy <kevin@8t8.us>
Sun, 6 Oct 2019 08:32:42 +0000 (16:32 +0800)
committerKevin McCarthy <kevin@8t8.us>
Mon, 7 Oct 2019 01:45:08 +0000 (09:45 +0800)
The hook parameters still need to be converted, but I'm working
towards it slowly.

hook.c
muttlib.c
protos.h

diff --git a/hook.c b/hook.c
index 120ab4274791232dca043154f735975e76814059..137a56162fe50b612821dd5f2dcde91daaa12682 100644 (file)
--- 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);
     }
index f63c2e28e0ecb6b6c46fc9049ee985675ff33384..eed74ce95dfdacdb86fe5a2be256cb944cb15f95 100644 (file)
--- 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 = '_';
 }
index 10a15701299694cccefa1c1a1444078ca7ceb8ef..5a99f900f2f961643d4e52638f0ff81ec61ccd3a 100644 (file)
--- 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)