X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=hdrline.c;h=b47e2bd9398bfe5181a4abe98beb7fb02be6c421;hp=f6ad7f7d0786d309e22977d6d1ddbd6de426f5d3;hb=5291c0f984bad00026e56260c42ebecc2252429f;hpb=96d53ff49c308769efbf708e1e65819077cb7af6 diff --git a/hdrline.c b/hdrline.c index f6ad7f7..b47e2bd 100644 --- a/hdrline.c +++ b/hdrline.c @@ -14,11 +14,15 @@ #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 "lib/str.h" +#include + +#include + #include "lib/rx.h" #include @@ -26,14 +30,14 @@ #include #include -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,6 +633,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 = ' '; @@ -659,7 +683,7 @@ static const char *hdr_format_str (char *dest, ((i = mutt_user_is_recipient (hdr)) < - mutt_strlen (Tochars)) ? + m_strlen(Tochars)) ? Tochars[i] : ' '))); mutt_format_s (dest, destlen, prefix, buf2); break; @@ -683,7 +707,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 && safe_strcasecmp (hdr->env->x_label, + if (htmp && m_strcasecmp(hdr->env->x_label, htmp->env->x_label) == 0) i = 0; }