#endif
#include "mutt.h"
+#include "ascii.h"
+#include "buffer.h"
+#include "enter.h"
#include "mutt_curses.h"
#include "mime.h"
#include "mx.h"
#include "url.h"
+#include "attach.h"
#include "reldate.h"
+#include "version.h"
#ifdef USE_IMAP
#include "imap.h"
* Renamed to mutt_adv_mktemp so I only have to change where it's
* called, and not all possible cases.
*/
-void mutt_adv_mktemp (char *s, size_t l)
+void mutt_adv_mktemp (const char* dir, char *s, size_t l)
{
char buf[_POSIX_PATH_MAX];
char tmp[_POSIX_PATH_MAX];
size_t sl;
struct stat sb;
- strfcpy (buf, NONULL (Tempdir), sizeof (buf));
+ strfcpy (buf, dir && *dir ? dir : NONULL (Tempdir), sizeof (buf));
mutt_expand_path (buf, sizeof (buf));
if (s[0] == '\0') {
snprintf (s, l, "%s/muttXXXXXX", buf);
tmp[0] = '\0';
}
- mutt_adv_mktemp (tmp, sizeof (tmp));
+ mutt_adv_mktemp (NULL, tmp, sizeof (tmp));
if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1)
return -1;
*p = 0;
}
-LIST *mutt_add_list (LIST * head, const char *data) {
- size_t len = str_len (data);
- return (mutt_add_list_n (head, data, len ? len + 1 : 0));
-}
-
-LIST *mutt_add_list_n (LIST *head, const void *data, size_t len) {
- LIST *tmp;
-
- for (tmp = head; tmp && tmp->next; tmp = tmp->next);
-
- if (tmp) {
- tmp->next = mem_malloc (sizeof (LIST));
- tmp = tmp->next;
- } else
- head = tmp = mem_malloc (sizeof (LIST));
-
- tmp->data = mem_malloc (len);
- if (len)
- memcpy (tmp->data, data, len);
- tmp->next = NULL;
- return head;
-}
-
-void mutt_free_list (LIST ** list)
-{
- LIST *p;
-
- if (!list)
- return;
- while (*list) {
- p = *list;
- *list = (*list)->next;
- mem_free (&p->data);
- mem_free (&p);
- }
-}
-
HEADER *mutt_dup_header (HEADER * h)
{
HEADER *hnew;
return (ret);
}
-void state_prefix_putc (char c, STATE * s)
-{
- if (s->flags & M_PENDINGPREFIX) {
- int i;
-
- i = str_len (Quotebuf);
- Quotebuf[i++] = c;
- Quotebuf[i] = '\0';
- if (i == sizeof (Quotebuf) - 1 || c == '\n') {
- char buf[2 * SHORT_STRING];
- int j = 0, offset = 0;
- regmatch_t pmatch[1];
-
- state_reset_prefix (s);
- while (regexec
- ((regex_t *) QuoteRegexp.rx, &Quotebuf[offset], 1, pmatch,
- 0) == 0)
- offset += pmatch->rm_eo;
-
- if (!option (OPTQUOTEEMPTY) && Quotebuf[offset] == '\n') {
- buf[0] = '\n';
- buf[1] = '\0';
- }
- else if (option (OPTQUOTEQUOTED) && offset) {
- for (i = 0; i < offset; i++)
- if (Quotebuf[i] != ' ')
- j = i;
- strncpy (buf, Quotebuf, j + 1);
- strcpy (buf + j + 1, Quotebuf + j);
- }
- else
- snprintf (buf, sizeof (buf), "%s%s", NONULL (s->prefix), Quotebuf);
-
- state_puts (buf, s);
- }
- }
- else
- state_putc (c, s);
-
- if (c == '\n') {
- state_set_prefix (s);
- Quotebuf[0] = '\0';
- }
-}
-
-int state_printf (STATE * s, const char *fmt, ...)
-{
- int rv;
- va_list ap;
-
- va_start (ap, fmt);
- rv = vfprintf (s->fpout, fmt, ap);
- va_end (ap);
-
- return rv;
-}
-
-void state_mark_attach (STATE * s)
-{
- if ((s->flags & M_DISPLAY) && !str_cmp (Pager, "builtin"))
- state_puts (AttachmentMarker, s);
-}
-
-void state_attach_puts (const char *t, STATE * s)
-{
- if (*t != '\n')
- state_mark_attach (s);
- while (*t) {
- state_putc (*t, s);
- if (*t++ == '\n' && *t)
- if (*t != '\n')
- state_mark_attach (s);
- }
-}
-
void mutt_display_sanitize (char *s)
{
for (; *s; s++) {
}
/* Decrease a file's modification time by 1 second */
-
time_t mutt_decrease_mtime (const char *f, struct stat *st)
{
struct utimbuf utim;
return mtime;
}
-const char *mutt_make_version (void)
+/* sets mtime of 'to' to mtime of 'from' */
+void mutt_set_mtime (const char* from, const char* to) {
+ struct utimbuf utim;
+ struct stat st;
+
+ if (stat (from, &st) != -1) {
+ utim.actime = st.st_mtime;
+ utim.modtime = st.st_mtime;
+ utime (to, &utim);
+ }
+}
+
+const char *mutt_make_version (int full)
{
static char vstring[STRING];
- snprintf (vstring, sizeof (vstring), "Mutt-ng %s (%s) based on Mutt 1.5.9",
- MUTT_VERSION, ReleaseDate);
+ if (full)
+ snprintf (vstring, sizeof (vstring), "Mutt-ng %s-r%s (based "
+ "on Mutt 1.5.11/%s)", MUTT_VERSION, MUTT_REVISION,
+ ReleaseDate);
+ else
+ snprintf (vstring, sizeof (vstring), "mutt-ng/%s-r%s",
+ MUTT_VERSION, MUTT_REVISION);
return vstring;
}
for (p = l->template; *p;) {
if (*p == '%') {
n = atoi (++p); /* find pmatch index */
- while (isdigit (*p))
+ while (isdigit ((unsigned char) *p))
++p; /* skip subst token */
for (i = pmatch[n].rm_so; (i < pmatch[n].rm_eo) && (tlen < x); i++)
text[tlen++] = s[i];