tnow = time (NULL);
t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y";
strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime));
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, date);
+ mutt_format_s (dest, destlen, fmt, date);
}
else
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, "");
- }
+ mutt_format_s (dest, destlen, fmt, "");
break;
case 'f':
(S_ISDIR (folder->ff->st->st_mode) ? "/" :
((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : "")));
}
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, fn);
+ mutt_format_s (dest, destlen, fmt, fn);
break;
case 'F':
(folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-',
(folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-',
(folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-');
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, permission);
+ mutt_format_s (dest, destlen, fmt, permission);
}
#ifdef USE_IMAP
else if (folder->ff->imap)
/* mark folders with subfolders AND mail */
sprintf (permission, "IMAP %c",
(folder->ff->inferiors && folder->ff->selectable) ? '+' : ' ');
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, permission);
+ mutt_format_s (dest, destlen, fmt, permission);
}
#endif
else
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, "");
- }
+ mutt_format_s (dest, destlen, fmt, "");
break;
case 'g':
if (folder->ff->st != NULL)
{
if ((gr = getgrgid (folder->ff->st->st_gid)))
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, gr->gr_name);
- }
+ mutt_format_s (dest, destlen, fmt, gr->gr_name);
else
{
snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
}
}
else
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, "");
- }
+ mutt_format_s (dest, destlen, fmt, "");
break;
case 'l':
snprintf (dest, destlen, tmp, folder->ff->st->st_nlink);
}
else
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, "");
- }
+ mutt_format_s (dest, destlen, fmt, "");
break;
case 'N':
snprintf (dest, destlen, tmp, (long) folder->ff->st->st_size);
}
else
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, "");
- }
+ mutt_format_s (dest, destlen, fmt, "");
break;
case 't':
if (folder->ff->st != NULL)
{
if ((pw = getpwuid (folder->ff->st->st_uid)))
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, pw->pw_name);
- }
+ mutt_format_s (dest, destlen, fmt, pw->pw_name);
else
{
snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
}
}
else
- {
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, "");
- }
+ mutt_format_s (dest, destlen, fmt, "");
break;
default:
}
}
+/*
+ * This formats a string rather like
+ * snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
+ * snprintf (dest, destlen, fmt, s);
+ * except that the numbers in the conversion specification refer to
+ * the number of character cells when printed.
+ */
+
+void mutt_format_s (char *dest,
+ size_t destlen,
+ const char *prefix,
+ const char *s)
+{
+ int right_justify = 1;
+ char *p;
+ int min_width;
+ int max_width = INT_MAX;
+
+ if (*prefix == '-')
+ ++prefix, right_justify = 0;
+ min_width = strtol (prefix, &p, 10);
+ if (*p == '.')
+ {
+ prefix = p + 1;
+ max_width = strtol (prefix, &p, 10);
+ if (p <= prefix)
+ max_width = INT_MAX;
+ }
+
+ mutt_format_string (dest, destlen, min_width, max_width,
+ right_justify, ' ', s, mutt_strlen (s));
+}
+
/*
* mutt_paddstr (n, s) is almost equivalent to
* mutt_format_string (bigbuf, big, n, n, 0, ' ', s, big), addstr (bigbuf)
HEADER *hdr;
};
-static void hdr_format_s (char *dest,
- size_t destlen,
- const char *prefix,
- char *s)
-{
- int right_justify = 1;
- char *p;
- int min_width;
- int max_width = INT_MAX;
-
- if (*prefix == '-')
- ++prefix, right_justify = 0;
- min_width = strtol (prefix, &p, 10);
- if (*p == '.')
- {
- prefix = p + 1;
- max_width = strtol (prefix, &p, 10);
- if (p <= prefix)
- max_width = INT_MAX;
- }
-
- mutt_format_string (dest, destlen, min_width, max_width,
- right_justify, ' ', s, mutt_strlen (s));
-}
-
static const char *
hdr_format_str (char *dest,
size_t destlen,
case 'a':
if(hdr->env->from && hdr->env->from->mailbox)
{
- hdr_format_s (dest, destlen, prefix, hdr->env->from->mailbox);
+ mutt_format_s (dest, destlen, prefix, hdr->env->from->mailbox);
}
else
dest[0] = '\0';
if (dest[0])
{
strfcpy (buf2, dest, sizeof(buf2));
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
}
/* fall through if 'B' returns nothing */
else
strfcpy(dest, "(null)", destlen);
strfcpy (buf2, dest, sizeof(buf2));
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'c':
mutt_pretty_size (buf2, sizeof (buf2), (long) hdr->content->length);
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'C':
if (do_locales)
setlocale (LC_TIME, "C");
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
if (len > 0 && op != 'd')
src = cp + 1;
}
case 'f':
buf2[0] = 0;
rfc822_write_address (buf2, sizeof (buf2), hdr->env->from);
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'F':
if (!optional)
{
make_from (hdr->env, buf2, sizeof (buf2), 0);
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
}
else if (mutt_addr_is_user (hdr->env->from))
optional = 0;
break;
case 'i':
- hdr_format_s (dest, destlen, prefix, hdr->env->message_id ? hdr->env->message_id : "<no.id>");
+ mutt_format_s (dest, destlen, prefix, hdr->env->message_id ? hdr->env->message_id : "<no.id>");
break;
case 'l':
if (!optional)
{
make_from (hdr->env, buf2, sizeof (buf2), 1);
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
}
else if (!check_for_mailing_list (hdr->env->to, NULL, NULL, 0) &&
!check_for_mailing_list (hdr->env->cc, NULL, NULL, 0))
break;
case 'n':
- hdr_format_s (dest, destlen, prefix, mutt_get_name (hdr->env->from));
+ mutt_format_s (dest, destlen, prefix, mutt_get_name (hdr->env->from));
break;
case 'N':
make_from_addr (hdr->env, buf2, sizeof (buf2), 1);
if (!option (OPTSAVEADDRESS) && (p = strpbrk (buf2, "%@")))
*p = 0;
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
}
else if (!check_for_mailing_list_addr (hdr->env->to, NULL, 0) &&
!check_for_mailing_list_addr (hdr->env->cc, NULL, 0))
if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1)
snprintf (dest, destlen, fmt, hdr->num_hidden);
else if (is_index && threads)
- hdr_format_s (dest, destlen, prefix, " ");
+ mutt_format_s (dest, destlen, prefix, " ");
else
*dest = '\0';
}
if (flags & M_FORMAT_FORCESUBJ)
{
snprintf (buf2, sizeof (buf2), "%s%s", hdr->tree, NONULL (hdr->env->subject));
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
}
else
- hdr_format_s (dest, destlen, prefix, hdr->tree);
+ mutt_format_s (dest, destlen, prefix, hdr->tree);
}
else
- hdr_format_s (dest, destlen, prefix, NONULL (hdr->env->subject));
+ mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->subject));
break;
case 'S':
else if (hdr->env->cc)
snprintf (buf2, sizeof (buf2), "Cc %s", mutt_get_name (hdr->env->cc));
}
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'T':
}
else
buf2[0] = 0;
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'v':
if (mutt_addr_is_user (hdr->env->from))
{
if (hdr->env->to)
- hdr_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->to));
+ mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->to));
else if (hdr->env->cc)
- hdr_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->cc));
+ mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->cc));
else
*buf2 = 0;
}
else
- hdr_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->from));
+ mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->from));
if ((p = strpbrk (buf2, " %@")))
*p = 0;
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'Z':
hdr->tagged ? '*' :
(hdr->flagged ? '!' :
(Tochars && ((i = mutt_user_is_recipient (hdr)) < mutt_strlen (Tochars)) ? Tochars[i] : ' ')));
- hdr_format_s (dest, destlen, prefix, buf2);
+ mutt_format_s (dest, destlen, prefix, buf2);
break;
case 'y':
if (optional)
optional = hdr->env->x_label ? 1 : 0;
- hdr_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
+ mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
break;
case 'Y':
optional = i;
if (i)
- hdr_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
+ mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
else
- hdr_format_s (dest, destlen, prefix, "");
+ mutt_format_s (dest, destlen, prefix, "");
break;
void mutt_fix_reply_recipients (ENVELOPE *env);
void mutt_folder_hook (char *);
void mutt_format_string (char *, size_t, int, int, int, char, const char *, size_t);
+void mutt_format_s (char *, size_t, const char *, const char *);
void mutt_forward_intro (FILE *fp, HEADER *cur);
void mutt_forward_trailer (FILE *fp);
void mutt_free_alias (ALIAS **);
case 'C':
if (!optional)
{
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
if (mutt_is_text_type (aptr->content->type, aptr->content->subtype) &&
mutt_get_body_charset (charset, sizeof (charset), aptr->content))
- snprintf (dest, destlen, fmt, charset);
+ mutt_format_s (dest, destlen, prefix, charset);
else
- snprintf (dest, destlen, fmt, "");
+ mutt_format_s (dest, destlen, prefix, "");
}
else if (!mutt_is_text_type (aptr->content->type, aptr->content->subtype) ||
!mutt_get_body_charset (charset, sizeof (charset), aptr->content))
case 'd':
if(!optional)
{
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
if (aptr->content->description)
{
- snprintf (dest, destlen, fmt, aptr->content->description);
+ mutt_format_s (dest, destlen, prefix, aptr->content->description);
break;
}
if (mutt_is_message_type(aptr->content->type, aptr->content->subtype) &&
M_FORMAT_FORCESUBJ | M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR);
if (*s)
{
- snprintf (dest, destlen, fmt, s);
+ mutt_format_s (dest, destlen, prefix, s);
break;
}
}
if (!aptr->content->filename)
{
- snprintf (dest, destlen, fmt, "<no description>");
+ mutt_format_s (dest, destlen, prefix, "<no description>");
break;
}
}
case 'f':
if(!optional)
{
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
if (aptr->content->filename && *aptr->content->filename == '/')
{
char path[_POSIX_PATH_MAX];
strfcpy (path, aptr->content->filename, sizeof (path));
mutt_pretty_mailbox (path);
- snprintf (dest, destlen, fmt, path);
+ mutt_format_s (dest, destlen, prefix, path);
}
else
- snprintf (dest, destlen, fmt, NONULL (aptr->content->filename));
+ mutt_format_s (dest, destlen, prefix, NONULL (aptr->content->filename));
}
else if(!aptr->content->filename)
optional = 0;
break;
case 'e':
if(!optional)
- {
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, ENCODING (aptr->content->encoding));
- }
+ mutt_format_s (dest, destlen, prefix,
+ ENCODING (aptr->content->encoding));
break;
case 'I':
if (!optional)
break;
case 'm':
if(!optional)
- {
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, TYPE (aptr->content));
- }
+ mutt_format_s (dest, destlen, prefix, TYPE (aptr->content));
break;
case 'M':
if(!optional)
- {
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, aptr->content->subtype);
- }
+ mutt_format_s (dest, destlen, prefix, aptr->content->subtype);
else if(!aptr->content->subtype)
optional = 0;
break;
if(!optional)
{
mutt_pretty_size (tmp, sizeof(tmp), l);
- snprintf (fmt, sizeof(fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, tmp);
+ mutt_format_s (dest, destlen, prefix, tmp);
}
else if (l == 0)
optional = 0;
break;
case 'T':
if(!optional)
- {
- snprintf (fmt, sizeof(fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, NONULL (aptr->tree));
- }
+ mutt_format_s (dest, destlen, prefix, NONULL (aptr->tree));
else if (!aptr->tree)
optional = 0;
break;