#include <grp.h>
#include <pwd.h>
-#include <lib-mime/mime.h>
#include <lib-ui/curses.h>
#include <lib-ui/enter.h>
#include <lib-sys/unix.h>
-#include <lib-mx/mx.h>
+#include <imap/imap.h>
#include "alias.h"
#include "mutt.h"
#include "attach.h"
-
#include "version.h"
-#include <imap/imap.h>
-
-#include <lib-crypt/crypt.h>
-
/* Modified by blong to accept a "suggestion" for file name. If
* that file exists, then construct one with unique name but
* keep any extension. This might fail, I guess.
}
}
-/* returns true if the header contained in "s" is in list "t" */
-int mutt_matches_ignore (const char *s, string_list_t * t)
+void mutt_mktemp(char *s)
{
- for (; t; t = t->next) {
- if (!ascii_strncasecmp (s, t->data, m_strlen(t->data))
- || *t->data == '*')
- return 1;
- }
- return 0;
+ int fd = m_tempfd(s, _POSIX_PATH_MAX, NONULL(Tempdir), NULL);
+ if (fd < 0) {
+ *s = '\0';
+ } else {
+ close(fd);
+ unlink(s);
+ }
}
ssize_t _mutt_expand_path(char *s, ssize_t slen, int rx)
return m_strcpy(s, slen, tmp);
}
-void mutt_mktemp(char *s)
-{
- int fd = m_tempfd(s, _POSIX_PATH_MAX, NONULL(Tempdir), NULL);
- if (fd < 0) {
- *s = '\0';
- } else {
- close(fd);
- unlink(s);
- }
-}
-
/* collapse the pathname using ~ or = when possible */
void mutt_pretty_mailbox (char *s)
{
}
}
-ssize_t m_strformat(char *dst, ssize_t dlen, int width, const char *fmt,
- format_t *callback, anytype cdata, format_flag flags)
-{
- ssize_t pos = flags & M_FORMAT_ARROWCURSOR ? 3 : 0;
-
- m_strpad(dst, dlen, '\0', pos + 1);
- if (!fmt)
- return pos;
-
- while (*fmt) {
- int ch;
-
- if (*fmt == '%') {
- char ifstr[STRING], elstr[STRING], prefix[STRING];
-
- *ifstr = *elstr = *prefix = '\0';
-
- if (*++fmt == '%') {
- pos += m_strputc(dst + pos, dlen - pos, *fmt++);
- continue;
- }
-
- if (*fmt == '?') {
- flags |= M_FORMAT_OPTIONAL;
- fmt++;
- } else {
- ssize_t pfxlen;
- flags &= ~M_FORMAT_OPTIONAL;
-
- /* eat the format string */
- pfxlen = strspn(fmt, "0123456789.-");
- m_strncpy(prefix, sizeof(prefix), fmt, pfxlen);
- fmt += pfxlen;
- }
-
- /* save the character to switch on */
- if (!(ch = *fmt++))
- break;
-
- if (flags & M_FORMAT_OPTIONAL) {
- ssize_t iflen;
- const char *p;
-
- if (*fmt++ != '?')
- break; /* bad format */
-
- /* eat the `if' part of the string */
- iflen = strcspn(fmt, "?&");
- m_strncpy(ifstr, ssizeof(ifstr), fmt, iflen);
- fmt += iflen;
-
- /* eat the `else' part of the string (optional) */
- if (*fmt == '&')
- fmt++; /* skip the & */
-
- p = m_strchrnul(fmt, '?');
- m_strncpy(elstr, ssizeof(elstr), fmt, p - fmt);
- fmt = p;
-
- if (!*fmt++) /* move past the trailing `?' */
- break; /* bad format */
- }
-
- switch (ch) {
- char lower, nodots, buf[LONG_STRING];
-
- case '>': /* right justify to EOL */
- width -= mutt_strwidth(dst);
-
- ch = *fmt++; /* pad char */
-
- if (width > 0) {
- m_strformat(buf, sizeof(buf), 0, fmt, callback, cdata, flags);
- width -= mutt_strwidth(buf);
- pos += m_strpad(dst + pos, dlen - pos, ch, width);
- pos += m_strcpy(dst + pos, dlen - pos, buf);
- }
- return pos; /* skip rest of input */
-
- case '|': /* pad to EOL */
- width -= mutt_strwidth(dst);
- return pos + m_strpad(dst + pos, dlen - pos, *fmt, width);
-
- default:
- lower = nodots = 0;
-
- while (ch == '_' || ch == ':') {
- lower |= ch == '_';
- nodots |= ch == ':';
- ch = *fmt++;
- }
-
- /* use callback function to handle this case */
- fmt = callback(buf, sizeof (buf), ch, fmt, prefix,
- ifstr, elstr, cdata, flags);
-
- if (lower)
- m_strtolower(buf);
-
- if (nodots) {
- char *p;
-
- for (p = buf; *p; p++) {
- if (*p == '.')
- *p = '_';
- }
- }
-
- pos += m_strcpy(dst + pos, dlen - pos, buf);
- break;
- }
- continue;
- }
-
- if (*fmt == '\\') {
- if (!*++fmt)
- break;
- switch ((ch = *fmt++)) {
- case 'n': pos += m_strputc(dst + pos, dlen - pos, '\n'); break;
- case 't': pos += m_strputc(dst + pos, dlen - pos, '\t'); break;
- case 'r': pos += m_strputc(dst + pos, dlen - pos, '\r'); break;
- case 'f': pos += m_strputc(dst + pos, dlen - pos, '\f'); break;
- case 'v': pos += m_strputc(dst + pos, dlen - pos, '\v'); break;
- default: pos += m_strputc(dst + pos, dlen - pos, ch); break;
- }
- } else {
- ssize_t len = strcspn(fmt, "%\\");
-
- pos += m_strncpy(dst + pos, dlen - pos, fmt, len);
- fmt += len;
- }
- }
-
- return pos;
-}
-
/* returns 0 if OK to proceed, -1 to abort, 1 to retry */
int mutt_save_confirm (const char *s, struct stat *st)
{
if ((ISSPACE(ch) && !(flags & M_TOKEN_SPACE))
|| (ch == '#' && !(flags & M_TOKEN_COMMENT))
|| (ch == '=' && (flags & M_TOKEN_EQUAL))
- || (ch == ';' && !(flags & M_TOKEN_SEMICOLON))
|| ((flags & M_TOKEN_PATTERN) && strchr("~=!|", ch)))
{
break;