HEADER *hdr, *htmp;
CONTEXT *ctx;
char fmt[STRING], buf2[STRING], ch, *p;
- int do_locales, i;
+ int do_locales, i, c;
int optional = (flags & M_FORMAT_OPTIONAL);
int threads = ((Sort & SORT_MASK) == SORT_THREADS);
int is_index = (flags & M_FORMAT_INDEX);
break;
case 'T':
- snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
- snprintf (dest, destlen, fmt,
- ((i = mutt_user_is_recipient(hdr)) < m_strlen(Tochars)) ? Tochars[i] : ' ');
+ i = mutt_user_is_recipient(hdr);
+ assert (i >= 0); /* help compiler to see c is initialized */
+
+ if (Charset_is_utf8) {
+ const char *s = Tochars;
+
+ snprintf (fmt, sizeof (fmt), "%%%slc", prefix);
+ while (i-- >= 0) {
+ c = m_ustrgetc(s, &s);
+ if (c <= 0) {
+ c = ' ';
+ break;
+ }
+ }
+
+ snprintf(dest, destlen, fmt, c);
+ } else {
+ snprintf(fmt, sizeof (fmt), "%%%sc", prefix);
+ snprintf(dest, destlen, fmt, i < m_strlen(Tochars) ? Tochars[i] : ' ');
+ }
break;
case 'u':
else if (hdr->security & PGPKEY)
ch = 'K';
- snprintf(buf2, sizeof (buf2), "%c%c%c",
+ if (hdr->tagged) {
+ c = '*';
+ } else
+ if (hdr->flagged) {
+ c = '!';
+ } else {
+ i = mutt_user_is_recipient(hdr);
+ assert (i >= 0); /* help compiler to see c is initialized */
+
+ if (Charset_is_utf8) {
+ const char *s = Tochars;
+
+ snprintf (fmt, sizeof (fmt), "%%%slc", prefix);
+ while (i-- >= 0) {
+ c = m_ustrgetc(s, &s);
+ if (c <= 0) {
+ c = ' ';
+ break;
+ }
+ }
+ } else {
+ c = i < m_strlen(Tochars) ? Tochars[i] : ' ';
+ }
+ }
+ snprintf(buf2, sizeof (buf2), Charset_is_utf8 ? "%c%c%lc" : "%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 ? '!'
- : ((i = mutt_user_is_recipient(hdr)) < m_strlen(Tochars) ? Tochars[i] : ' ')));
+ hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch), c);
mutt_format_s (dest, destlen, prefix, buf2);
break;