Use p_new instead of xmalloc()
[apps/madmutt.git] / copy.c
diff --git a/copy.c b/copy.c
index 3a8cdfb..55dd192 100644 (file)
--- a/copy.c
+++ b/copy.c
@@ -163,8 +163,8 @@ mutt_copy_hdr (FILE* in, FILE* out, off_t off_start, off_t off_end,
       /* note: CH_FROM takes precedence over header weeding. */
       if (!((flags & CH_FROM) && (flags & CH_FORCE_FROM) && this_is_from) &&
           (flags & CH_WEED) &&
-          mutt_matches_ignore (buf, Ignore) &&
-          !mutt_matches_ignore (buf, UnIgnore))
+          string_list_contains(Ignore, buf, "*") &&
+          !string_list_contains(UnIgnore, buf, "*"))
         continue;
       if ((flags & CH_WEED_DELIVERED) &&
           ascii_strncasecmp ("Delivered-To:", buf, 13) == 0)
@@ -318,7 +318,7 @@ int
 mutt_copy_header (FILE * in, HEADER * h, FILE * out, int flags,
                   const char *prefix)
 {
-  char buffer[SHORT_STRING];
+  char buffer[STRING];
 
   if (h->env)
     flags |= (h->env->irt_changed ? CH_UPDATE_IRT : 0) |
@@ -329,7 +329,7 @@ mutt_copy_header (FILE * in, HEADER * h, FILE * out, int flags,
     return (-1);
 
   if (flags & CH_TXTPLAIN) {
-    char chsbuf[SHORT_STRING];
+    char chsbuf[STRING];
 
     fputs ("MIME-Version: 1.0\n", out);
     fputs ("Content-Transfer-Encoding: 8bit\n", out);
@@ -494,7 +494,7 @@ int
 _mutt_copy_message (FILE * fpout, FILE * fpin, HEADER * hdr, BODY * body,
                     int flags, int chflags)
 {
-  char prefix[SHORT_STRING];
+  char prefix[STRING];
   STATE s;
   off_t new_offset = -1;
   int rc = 0;
@@ -514,7 +514,7 @@ _mutt_copy_message (FILE * fpout, FILE * fpin, HEADER * hdr, BODY * body,
     else if (hdr->attach_del && (chflags & CH_UPDATE_LEN)) {
       int new_lines;
       off_t new_length = body->length;
-      char date[SHORT_STRING];
+      char date[STRING];
 
       mutt_make_date (date, sizeof (date));
       date[5] = date[m_strlen(date) - 1] = '\"';
@@ -826,85 +826,42 @@ static void format_address_header (char **h, address_t * a)
   m_strcat(*h, buflen, "\n");
 }
 
-static int address_header_decode (char **h)
+static int address_header_decode(char **h)
 {
-  char *s = *h;
-  int l;
+    address_t *a;
+    char *p, *s = *h;
 
-  address_t *a = NULL;
+    p = strchr(s, ':');
+    if (!p)
+        return 0;
 
-  switch (tolower ((unsigned char) *s)) {
-  case 'r':
-    {
-      if (ascii_strncasecmp (s, "return-path:", 12) == 0) {
-        l = 12;
-        break;
-      }
-      else if (ascii_strncasecmp (s, "reply-to:", 9) == 0) {
-        l = 9;
+    switch (mime_which_token(s, p - s)) {
+      case MIME_RETURN_PATH:
+      case MIME_REPLY_TO:
+      case MIME_FROM:
+      case MIME_CC:
+      case MIME_BCC:
+      case MIME_SENDER:
+      case MIME_TO:
+      case MIME_MAIL_FOLLOWUP_TO:
+        p++;
         break;
-      }
-      return 0;
-    }
-  case 'f':
-    {
-      if (ascii_strncasecmp (s, "from:", 5))
-        return 0;
-      l = 5;
-      break;
-    }
-  case 'c':
-    {
-      if (ascii_strncasecmp (s, "cc:", 3))
-        return 0;
-      l = 3;
-      break;
 
-    }
-  case 'b':
-    {
-      if (ascii_strncasecmp (s, "bcc:", 4))
-        return 0;
-      l = 4;
-      break;
-    }
-  case 's':
-    {
-      if (ascii_strncasecmp (s, "sender:", 7))
-        return 0;
-      l = 7;
-      break;
-    }
-  case 't':
-    {
-      if (ascii_strncasecmp (s, "to:", 3))
-        return 0;
-      l = 3;
-      break;
-    }
-  case 'm':
-    {
-      if (ascii_strncasecmp (s, "mail-followup-to:", 17))
+      default:
         return 0;
-      l = 17;
-      break;
     }
-  default:
-    return 0;
-  }
 
-  if ((a = rfc822_parse_adrlist (a, s + l)) == NULL)
-    return 0;
-
-  mutt_addrlist_to_local (a);
-  rfc2047_decode_adrlist (a);
-
-  *h = p_dupstr(s, l + 1);
+    a = rfc822_parse_adrlist(a, p);
+    if (!a)
+        return 0;
 
-  format_address_header (h, a);
+    mutt_addrlist_to_local(a);
+    rfc2047_decode_adrlist(a);
 
-  address_list_wipe(&a);
+    *h = p_dupstr(s, p - s);
+    format_address_header(h, a);
+    address_list_wipe(&a);
 
-  p_delete(&s);
-  return 1;
+    p_delete(&s);
+    return 1;
 }