leftover
[apps/madmutt.git] / hdrline.c
index 2ac88f1..72a1674 100644 (file)
--- a/hdrline.c
+++ b/hdrline.c
 #include "mutt.h"
 #include "mutt_curses.h"
 #include "sort.h"
+#include "thread.h"
 #include "charset.h"
-#include "mutt_crypt.h"
+#include <lib-crypt/crypt.h>
 #include "mutt_idna.h"
 
-#include "lib/str.h"
+#include <lib-lib/str.h>
+
+#include <lib-mime/mime.h>
+
 #include "lib/rx.h"
 
 #include <ctype.h>
 #include <string.h>
 #include <locale.h>
 
-int mutt_is_mail_list (ADDRESS * addr)
+int mutt_is_mail_list (address_t * addr)
 {
   if (!rx_list_match (UnMailLists, addr->mailbox))
     return rx_list_match (MailLists, addr->mailbox);
   return 0;
 }
 
-int mutt_is_subscribed_list (ADDRESS * addr)
+int mutt_is_subscribed_list (address_t * addr)
 {
   if (!rx_list_match (UnMailLists, addr->mailbox)
       && !rx_list_match (UnSubscribedLists, addr->mailbox))
@@ -46,7 +50,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_t * adr, const char *pfx, char *buf, int buflen)
 {
   for (; adr; adr = adr->next) {
     if (mutt_is_subscribed_list (adr)) {
@@ -62,7 +66,7 @@ check_for_mailing_list (ADDRESS * adr, char *pfx, char *buf, int buflen)
  * If one is found, print the address of the list into buf, then return 1.
  * Otherwise, simply return 0.
  */
-static int check_for_mailing_list_addr (ADDRESS * adr, char *buf, int buflen)
+static int check_for_mailing_list_addr (address_t * adr, char *buf, int buflen)
 {
   for (; adr; adr = adr->next) {
     if (mutt_is_subscribed_list (adr)) {
@@ -75,7 +79,7 @@ static int check_for_mailing_list_addr (ADDRESS * adr, char *buf, int buflen)
 }
 
 
-static int first_mailing_list (char *buf, size_t buflen, ADDRESS * a)
+static int first_mailing_list (char *buf, size_t buflen, address_t * a)
 {
   for (; a; a = a->next) {
     if (mutt_is_subscribed_list (a)) {
@@ -104,7 +108,7 @@ static void make_from (ENVELOPE * hdr, char *buf, size_t len, int do_lists)
   else if (me && hdr->cc)
     snprintf (buf, len, "Cc %s", mutt_get_name (hdr->cc));
   else if (hdr->from)
-    strfcpy (buf, mutt_get_name (hdr->from), len);
+    m_strcpy(buf, len, mutt_get_name(hdr->from));
   else
     *buf = 0;
 }
@@ -128,12 +132,12 @@ static void make_from_addr (ENVELOPE * hdr, char *buf, size_t len,
   else if (me && hdr->cc)
     snprintf (buf, len, "%s", hdr->cc->mailbox);
   else if (hdr->from)
-    strfcpy (buf, hdr->from->mailbox, len);
+    m_strcpy(buf, len, hdr->from->mailbox);
   else
     *buf = 0;
 }
 
-static int user_in_addr (ADDRESS * a)
+static int user_in_addr (address_t * a)
 {
   for (; a; a = a->next)
     if (mutt_addr_is_user (a))
@@ -205,6 +209,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   */
@@ -263,7 +268,7 @@ static const char *hdr_format_str (char *dest,
         !first_mailing_list (dest, destlen, hdr->env->cc))
       dest[0] = 0;
     if (dest[0]) {
-      strfcpy (buf2, dest, sizeof (buf2));
+      m_strcpy(buf2, sizeof(buf2), dest);
       mutt_format_s (dest, destlen, prefix, buf2);
       break;
     }
@@ -272,13 +277,13 @@ static const char *hdr_format_str (char *dest,
   case 'b':
     if (ctx) {
       if ((p = strrchr (ctx->path, '/')))
-        strfcpy (dest, p + 1, destlen);
+        m_strcpy(dest, destlen, p + 1);
       else
-        strfcpy (dest, ctx->path, destlen);
+        m_strcpy(dest, destlen, ctx->path);
     }
     else
-      strfcpy (dest, "(null)", destlen);
-    strfcpy (buf2, dest, sizeof (buf2));
+      m_strcpy(dest, destlen, "(null)");
+    m_strcpy(buf2, sizeof(buf2), dest);
     mutt_format_s (dest, destlen, prefix, buf2);
     break;
 
@@ -484,7 +489,7 @@ static const char *hdr_format_str (char *dest,
       snprintf (dest, destlen, fmt, ctx->msgcount);
     }
     else
-      strfcpy (dest, "(null)", destlen);
+      m_strcpy(dest, destlen, "(null)");
     break;
 
   case 'n':
@@ -587,12 +592,12 @@ static const char *hdr_format_str (char *dest,
     snprintf (dest, destlen, fmt,
               (Tochars
                && ((i = mutt_user_is_recipient (hdr))) <
-               mutt_strlen (Tochars)) ? Tochars[i] : ' ');
+               m_strlen(Tochars)) ? Tochars[i] : ' ');
     break;
 
   case 'u':
     if (hdr->env->from && hdr->env->from->mailbox) {
-      strfcpy (buf2, mutt_addr_for_display (hdr->env->from), sizeof (buf2));
+      m_strcpy(buf2, sizeof(buf2), mutt_addr_for_display(hdr->env->from));
       if ((p = strpbrk (buf2, "%@")))
         *p = 0;
     }
@@ -628,39 +633,50 @@ 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 = ' ';
 
-    if (WithCrypto && hdr->security & GOODSIGN)
+    if (hdr->security & GOODSIGN)
       ch = 'S';
-    else if (WithCrypto && hdr->security & ENCRYPT)
+    else if (hdr->security & ENCRYPT)
       ch = 'P';
-    else if (WithCrypto && hdr->security & SIGN)
+    else if (hdr->security & SIGN)
       ch = 's';
-    else if ((WithCrypto & APPLICATION_PGP) && hdr->security & PGPKEY)
+    else if (hdr->security & PGPKEY)
       ch = 'K';
 
-    snprintf (buf2, sizeof (buf2),
-              "%c%c%c", (THREAD_NEW ? 'n' : (THREAD_OLD ? 'o' :
-                                             ((hdr->read
-                                               && (ctx
-                                                   && ctx->msgnotreadyet !=
-                                                   hdr->msgno))
-                                              ? (hdr->
-                                                 replied ? 'r' : ' ') : (hdr->
-                                                                         old ?
-                                                                         'O' :
-                                                                         'N')))),
+    snprintf(buf2, sizeof (buf2), "%c%c%c",
+             (THREAD_NEW ? 'n'
+              : (THREAD_OLD
+                 ?  'o'
+                 : ((hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno))
+                    ? (hdr->replied ? 'r' : ' ')
+                    : (hdr->old ?  'O' : 'N')))),
               hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch),
-              hdr->tagged ? '*' : (hdr->
-                                   flagged ? '!' : (Tochars
-                                                    &&
-                                                    ((i =
-                                                      mutt_user_is_recipient
-                                                      (hdr)) <
-                                                     mutt_strlen (Tochars)) ?
-                                                    Tochars[i] : ' ')));
+              hdr->tagged ? '*'
+              : (hdr->flagged ? '!'
+                 : (Tochars && ((i = mutt_user_is_recipient(hdr)) < m_strlen(Tochars))
+                    ?  Tochars[i] : ' ')));
     mutt_format_s (dest, destlen, prefix, buf2);
     break;
 
@@ -683,7 +699,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 && m_strcasecmp(hdr->env->x_label,
                                    htmp->env->x_label) == 0)
         i = 0;
     }