more constness.
[apps/madmutt.git] / hdrline.c
index 6304608..716a5df 100644 (file)
--- a/hdrline.c
+++ b/hdrline.c
@@ -1,19 +1,10 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2000,2002 Michael R. Elkins <me@mutt.org>
- * 
- *     This program is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU General Public License as published by
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- * 
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- * 
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
  */
 
 #if HAVE_CONFIG_H
 #include "mutt.h"
 #include "mutt_curses.h"
 #include "sort.h"
+#include "thread.h"
 #include "charset.h"
 #include "mutt_crypt.h"
 #include "mutt_idna.h"
+#include "mime.h"
+
+#include "lib/str.h"
+#include "lib/rx.h"
 
 #include <ctype.h>
 #include <stdlib.h>
 
 int mutt_is_mail_list (ADDRESS * addr)
 {
-  if (!mutt_match_rx_list (addr->mailbox, UnMailLists))
-    return mutt_match_rx_list (addr->mailbox, MailLists);
+  if (!rx_list_match (UnMailLists, addr->mailbox))
+    return rx_list_match (MailLists, addr->mailbox);
   return 0;
 }
 
 int mutt_is_subscribed_list (ADDRESS * addr)
 {
-  if (!mutt_match_rx_list (addr->mailbox, UnMailLists)
-      && !mutt_match_rx_list (addr->mailbox, UnSubscribedLists))
-    return mutt_match_rx_list (addr->mailbox, SubscribedLists);
+  if (!rx_list_match (UnMailLists, addr->mailbox)
+      && !rx_list_match (UnSubscribedLists, addr->mailbox))
+    return rx_list_match (SubscribedLists, addr->mailbox);
   return 0;
 }
 
@@ -52,7 +48,7 @@ int mutt_is_subscribed_list (ADDRESS * addr)
  * return 1.  Otherwise, simply return 0.
  */
 static int
-check_for_mailing_list (ADDRESS * adr, char *pfx, char *buf, int buflen)
+check_for_mailing_list (ADDRESS * adr, const char *pfx, char *buf, int buflen)
 {
   for (; adr; adr = adr->next) {
     if (mutt_is_subscribed_list (adr)) {
@@ -211,6 +207,7 @@ int mutt_user_is_recipient (HEADER * h)
  * %u = user (login) name of author
  * %v = first name of author, unless from self
  * %W = where user is (organization)
+ * %X = number of MIME attachments
  * %y = `x-label:' field (if present)
  * %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label)
  * %Z = status flags   */
@@ -593,7 +590,7 @@ static const char *hdr_format_str (char *dest,
     snprintf (dest, destlen, fmt,
               (Tochars
                && ((i = mutt_user_is_recipient (hdr))) <
-               mutt_strlen (Tochars)) ? Tochars[i] : ' ');
+               str_len (Tochars)) ? Tochars[i] : ' ');
     break;
 
   case 'u':
@@ -634,6 +631,25 @@ static const char *hdr_format_str (char *dest,
       optional = 0;
     break;
 
+  case 'X':
+    {
+      int count = 0;
+
+      if (option (OPTCOUNTATTACH)) {
+        if (!hdr->content->parts)
+          mutt_parse_mime_message(ctx, hdr);
+        count = mutt_count_body_parts(hdr, 0);
+      }
+
+      /* The recursion allows messages without depth to return 0. */
+      if (optional)
+        optional = count != 0;
+      
+      snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
+      snprintf (dest, destlen, fmt, count);
+    }
+    break;
+
   case 'Z':
 
     ch = ' ';
@@ -665,7 +681,7 @@ static const char *hdr_format_str (char *dest,
                                                     ((i =
                                                       mutt_user_is_recipient
                                                       (hdr)) <
-                                                     mutt_strlen (Tochars)) ?
+                                                     str_len (Tochars)) ?
                                                     Tochars[i] : ' ')));
     mutt_format_s (dest, destlen, prefix, buf2);
     break;
@@ -689,7 +705,7 @@ static const char *hdr_format_str (char *dest,
                && (hdr->thread->parent && hdr->thread->parent->message
                    && hdr->thread->parent->message->env->x_label))
         htmp = hdr->thread->parent->message;
-      if (htmp && mutt_strcasecmp (hdr->env->x_label,
+      if (htmp && str_casecmp (hdr->env->x_label,
                                    htmp->env->x_label) == 0)
         i = 0;
     }