--- PATCHES.orig 2019-12-06 03:41:54 UTC +++ PATCHES @@ -0,0 +1 @@ +patch-1.5.0.ats.date_conditional.1 --- hdrline.c.orig 2019-12-06 03:41:54 UTC +++ hdrline.c @@ -427,6 +427,53 @@ hdr_format_str (char *dest, const char *cp; struct tm *tm; time_t T; + int i = 0, invert = 0; + + if (optional && (op == '[' || op == '(')) { + char *is; + T = time(NULL); + T -= (op == '(') ? hdr->received : hdr->date_sent; + + is = (char *)prefix; + if( *is == '>' ) { + invert = 1; + ++is; + } + + while( *is && *is != '?' ) { + int t = strtol (is, &is, 10); + switch (*(is++)) { + case '?': + break; + case 'y': + t *= 365 * 24 * 60 * 60; + break; + case 'M': + t *= 30 * 24 * 60 * 60; + break; + case 'w': + t *= 7 * 24 * 60 * 60; + break; + case 'd': + t *= 24 * 60 * 60; + break; + case 'h': + t *= 60 * 60; + break; + case 'm': + t *= 60; + break; + } + i += t; + } + + if (i < 0) + i *= -1; + + if( (T > i || T < -1*i) ^ invert ) + optional = 0; + break; + } p = dest; --- muttlib.c.orig 2019-10-17 08:01:01 UTC +++ muttlib.c @@ -1563,7 +1563,16 @@ void mutt_FormatString (char *dest, /* output buffer if (*src == '?') { flags |= MUTT_FORMAT_OPTIONAL; - src++; + ch = *(++src); /* save the character to switch on */ + cp = prefix; + ++src; + count = 0; + while (count < sizeof (prefix) && *src != '?') + { + *cp++ = *src++; + count++; + } + *cp = 0; } else { @@ -1579,12 +1588,12 @@ void mutt_FormatString (char *dest, /* output buffer count++; } *cp = 0; - } - if (!*src) - break; /* bad format */ + if (!*src) + break; /* bad format */ - ch = *src++; /* save the character to switch on */ + ch = *src++; /* save the character to switch on */ + } if (flags & MUTT_FORMAT_OPTIONAL) {