#include <pwd.h>
#include <grp.h>
-#include "rfc822.h"
-#include "list.h"
-#include "hash.h"
+#include <lib-lib/buffer.h>
+#include <lib-lib/hash.h>
+#include <lib-lib/list.h>
+
+#include <lib-mime/mime.h>
+
#include "charset.h"
#include "lib/rx.h"
#define INITVAL(x)
#endif
-/* flags for mutt_copy_header() */
-#define CH_UPDATE 1 /* update the status and x-status fields? */
-#define CH_WEED (1<<1) /* weed the headers? */
-#define CH_DECODE (1<<2) /* do RFC1522 decoding? */
-#define CH_XMIT (1<<3) /* transmitting this message? */
-#define CH_FROM (1<<4) /* retain the "From " message separator? */
-#define CH_PREFIX (1<<5) /* use Prefix string? */
-#define CH_NOSTATUS (1<<6) /* supress the status and x-status fields */
-#define CH_REORDER (1<<7) /* Re-order output of headers */
-#define CH_NONEWLINE (1<<8) /* don't output terminating newline */
-#define CH_MIME (1<<9) /* ignore MIME fields */
-#define CH_UPDATE_LEN (1<<10) /* update Lines: and Content-Length: */
-#define CH_TXTPLAIN (1<<11) /* generate text/plain MIME headers */
-#define CH_NOLEN (1<<12) /* don't write Content-Length: and Lines: */
-#define CH_WEED_DELIVERED (1<<13) /* weed eventual Delivered-To headers */
-#define CH_FORCE_FROM (1<<14) /* give CH_FROM precedence over CH_WEED? */
-#define CH_NOQFROM (1<<15) /* give CH_FROM precedence over CH_WEED? */
-#define CH_UPDATE_IRT (1<<16) /* update In-Reply-To: */
-#define CH_UPDATE_REFS (1<<17) /* update References: */
-
-/* flags for mutt_enter_string() */
-#define M_ALIAS 1 /* do alias "completion" by calling up the alias-menu */
-#define M_FILE (1<<1) /* do file completion */
-#define M_EFILE (1<<2) /* do file completion, plus incoming folders */
-#define M_CMD (1<<3) /* do completion on previous word */
-#define M_PASS (1<<4) /* password mode (no echo) */
-#define M_CLEAR (1<<5) /* clear input if printable character is pressed */
-#define M_COMMAND (1<<6) /* do command completion */
-#define M_PATTERN (1<<7) /* pattern mode - only used for history classes */
-#define M_LASTFOLDER (1<<8) /* last-folder mode - hack hack hack */
-
-/* flags for mutt_get_token() */
-#define M_TOKEN_EQUAL 1 /* treat '=' as a special */
-#define M_TOKEN_CONDENSE (1<<1) /* ^(char) to control chars (macros) */
-#define M_TOKEN_SPACE (1<<2) /* don't treat whitespace as a term */
-#define M_TOKEN_QUOTE (1<<3) /* don't interpret quotes */
-#define M_TOKEN_PATTERN (1<<4) /* !)|~ are terms (for patterns) */
-#define M_TOKEN_COMMENT (1<<5) /* don't reap comments */
-#define M_TOKEN_SEMICOLON (1<<6) /* don't treat ; as special */
-
-/* flags for km_dokey() */
-#define M_KM_UNBUFFERED 1 /* don't read from the key buffer */
-
-typedef struct {
- char *data; /* pointer to data */
- char *dptr; /* current read/write position */
- size_t dsize; /* length of data */
- int destroy; /* destroy `data' when done? */
-} BUFFER;
-
typedef struct {
int ch; /* raw key pressed */
int op; /* function op */
#define M_REPLYHOOK (1<<10)
#define M_SEND2HOOK (1<<11)
-#ifdef USE_COMPRESSED
#define M_OPENHOOK (1<<12)
#define M_APPENDHOOK (1<<13)
#define M_CLOSEHOOK (1<<14)
-#endif
/* tree characters for linearize_tree and print_enriched_string */
#define M_TREE_LLCORNER 1
M_LIMIT,
M_EXPIRED,
M_SUPERSEDED,
- M_REALNAME,
/* actions for mutt_pattern_comp/mutt_pattern_exec */
M_AND,
M_REFERENCE,
M_RECIPIENT,
M_LIST,
+ M_SUBSCRIBED_LIST,
M_PERSONAL_RECIP,
M_PERSONAL_FROM,
M_ADDRESS,
M_CRYPT_ENCRYPT,
M_PGP_KEY,
M_XLABEL,
+ M_MIMEATTACH,
#ifdef USE_NNTP
M_NEWSGROUPS,
#endif
+ M_REALNAME,
+ M_MULTIPART,
/* Options for Mailcap lookup */
M_EDIT,
/* quad-option vars */
enum {
OPT_ABORT,
+ OPT_ATTACH,
OPT_BOUNCE,
OPT_COPY,
OPT_DELETE,
OPT_FORWEDIT,
OPT_INCLUDE,
-#ifdef USE_IMAP
OPT_IMAPRECONNECT,
-#endif
OPT_MFUPTO,
OPT_MIMEFWD,
OPT_MIMEFWDREST,
OPT_MOVE,
OPT_PGPMIMEAUTO, /* ask to revert to PGP/MIME when inline fails */
-#ifdef USE_POP
OPT_POPDELETE,
OPT_POPRECONNECT,
-#endif
OPT_POSTPONE,
OPT_PRINT,
OPT_QUIT,
#define SENDFORWARD (1<<3)
#define SENDPOSTPONED (1<<4)
#define SENDBATCH (1<<5)
-#define SENDMAILX (1<<6)
-#define SENDKEY (1<<7)
-#define SENDRESEND (1<<8)
-#define SENDNEWS (1<<9)
+#define SENDKEY (1<<6)
+#define SENDRESEND (1<<7)
+#define SENDNEWS (1<<8)
/* flags to _mutt_select_file() */
#define M_SEL_BUFFY (1<<0)
OPTCOLLAPSEUNREAD,
OPTCONFIRMAPPEND,
OPTCONFIRMCREATE,
+ OPTCOUNTATTACH,
OPTDELETEUNTAG,
+ OPTDELSP,
OPTDIGESTCOLLAPSE,
OPTDUPTHREADS,
OPTEDITHDRS,
OPTFORCENAME,
OPTFORWDECODE,
OPTFORWQUOTE,
-#if USE_HCACHE
+#ifdef USE_HCACHE
OPTHCACHEVERIFY,
#if HAVE_QDBM
OPTHCACHECOMPRESS,
OPTHIDETOPLIMITED,
OPTHIDETOPMISSING,
OPTIGNORELISTREPLYTO,
-#ifdef USE_IMAP
OPTIMAPCHECKSUBSCRIBED,
OPTIMAPLSUB,
OPTIMAPPASSIVE,
OPTIMAPPEEK,
OPTIMAPSERVERNOISE,
-#endif
#if defined(USE_SSL) || defined(USE_GNUTLS)
# ifndef USE_GNUTLS
OPTSSLSYSTEMCERTS,
OPTPAGERSTOP,
OPTPIPEDECODE,
OPTPIPESPLIT,
-#ifdef USE_POP
OPTPOPAUTHTRYALL,
OPTPOPLAST,
-#endif
OPTPRINTDECODE,
OPTPRINTSPLIT,
OPTPROMPTAFTER,
OPTWRAPSEARCH,
OPTWRITEBCC, /* write out a bcc header? */
OPTXMAILER,
+ OPTXMAILTO, /* 1 if $edit_header is forcebly set */
OPTXTERMSETTITLES,
OPTCRYPTUSEGPGME,
} SPAM_LIST;
-#define mutt_new_spam_list() mem_calloc (1, sizeof (SPAM_LIST))
+#define mutt_new_spam_list() p_new(SPAM_LIST, 1)
void mutt_free_spam_list (SPAM_LIST **);
int mutt_matches_ignore (const char *, LIST *);
void mutt_init (int, LIST *);
-typedef struct envelope {
- ADDRESS *return_path;
- ADDRESS *from;
- ADDRESS *to;
- ADDRESS *cc;
- ADDRESS *bcc;
- ADDRESS *sender;
- ADDRESS *reply_to;
- ADDRESS *mail_followup_to;
- char *list_post; /* this stores a mailto URL, or nothing */
- char *subject;
- char *real_subj; /* offset of the real subject */
- char *message_id;
- char *supersedes;
- char *date;
- char *x_label;
- char *organization;
-#ifdef USE_NNTP
- char *newsgroups;
- char *xref;
- char *followup_to;
- char *x_comment_to;
-#endif
- BUFFER *spam;
- LIST *references; /* message references (in reverse order) */
- LIST *in_reply_to; /* in-reply-to header content */
- LIST *userhdrs; /* user defined headers */
- unsigned int irt_changed:1; /* In-Reply-To changed to link/break threads */
- unsigned int refs_changed:1; /* References changed to break thread */
-} ENVELOPE;
-
-typedef struct parameter {
- char *attribute;
- char *value;
- struct parameter *next;
-} PARAMETER;
-
-/* Information that helps in determing the Content-* of an attachment */
-typedef struct content {
- long hibin; /* 8-bit characters */
- long lobin; /* unprintable 7-bit chars (eg., control chars) */
- long crlf; /* '\r' and '\n' characters */
- long ascii; /* number of ascii chars */
- long linemax; /* length of the longest line in the file */
- unsigned int space:1; /* whitespace at the end of lines? */
- unsigned int binary:1; /* long lines, or CR not in CRLF pair */
- unsigned int from:1; /* has a line beginning with "From "? */
- unsigned int dot:1; /* has a line consisting of a single dot? */
- unsigned int cr:1; /* has CR, even when in a CRLF pair */
-} CONTENT;
-
-typedef struct body {
- char *xtype; /* content-type if x-unknown */
- char *subtype; /* content-type subtype */
- PARAMETER *parameter; /* parameters of the content-type */
- char *description; /* content-description */
- char *form_name; /* Content-Disposition form-data name param */
- long hdr_offset; /* offset in stream where the headers begin.
- * this info is used when invoking metamail,
- * where we need to send the headers of the
- * attachment
- */
- long offset; /* offset where the actual data begins */
- long length; /* length (in bytes) of attachment */
- char *filename; /* when sending a message, this is the file
- * to which this structure refers
- */
- char *d_filename; /* filename to be used for the
- * content-disposition header.
- * If NULL, filename is used
- * instead.
- */
- char *file_charset; /* charset of attached file */
- CONTENT *content; /* structure used to store detailed info about
- * the content of the attachment. this is used
- * to determine what content-transfer-encoding
- * is required when sending mail.
- */
- struct body *next; /* next attachment in the list */
- struct body *parts; /* parts of a multipart or message/rfc822 */
- struct header *hdr; /* header information for message/rfc822 */
-
- struct attachptr *aptr; /* Menu information, used in recvattach.c */
-
- time_t stamp; /* time stamp of last
- * encoding update.
- */
-
- unsigned int type:4; /* content-type primary type */
- unsigned int encoding:3; /* content-transfer-encoding */
- unsigned int disposition:2; /* content-disposition */
- unsigned int use_disp:1; /* Content-Disposition uses filename= ? */
- unsigned int unlink:1; /* flag to indicate the the file named by
- * "filename" should be unlink()ed before
- * free()ing this structure
- */
- unsigned int tagged:1;
- unsigned int deleted:1; /* attachment marked for deletion */
-
- unsigned int noconv:1; /* don't do character set conversion */
- unsigned int force_charset:1;
- /* send mode: don't adjust the character
- * set when in send-mode.
- */
- unsigned int is_signed_data:1; /* A lot of MUAs don't indicate
- S/MIME signed-data correctly,
- e.g. they use foo.p7m even for
- the name of signed data. This
- flag is used to keep track of
- the actual message type. It
- gets set during the verification
- (which is done if the encryption
- try failed) and check by the
- function to figure the type of
- the message. */
-
- unsigned int goodsig:1; /* good cryptographic signature */
- unsigned int warnsig:1; /* maybe good signature */
- unsigned int badsig:1; /* bad cryptographic signature (needed to check encrypted s/mime-signatures) */
-
- unsigned int collapsed:1; /* used by recvattach */
-
-} BODY;
-
-typedef struct header {
- unsigned int security:11; /* bit 0-6: flags, bit 7,8: application.
- see: crypt.h pgplib.h, smime.h */
-
- unsigned int mime:1; /* has a Mime-Version header? */
- unsigned int flagged:1; /* marked important? */
- unsigned int tagged:1;
- unsigned int appended:1; /* has been saved */
- unsigned int purged:1; /* bypassing the trash folder */
- unsigned int deleted:1;
- unsigned int changed:1;
- unsigned int attach_del:1; /* has an attachment marked for deletion */
- unsigned int old:1;
- unsigned int read:1;
- unsigned int expired:1; /* already expired? */
- unsigned int superseded:1; /* got superseded? */
- unsigned int replied:1;
- unsigned int subject_changed:1; /* used for threading */
- unsigned int threaded:1; /* used for threading */
- unsigned int display_subject:1; /* used for threading */
- unsigned int recip_valid:1; /* is_recipient is valid */
- unsigned int active:1; /* message is not to be removed */
- unsigned int trash:1; /* message is marked as trashed on disk.
- * This flag is used by the maildir_trash
- * option.
- */
-
- /* timezone of the sender of this message */
- unsigned int zhours:5;
- unsigned int zminutes:6;
- unsigned int zoccident:1;
-
- /* bits used for caching when searching */
- unsigned int searched:1;
- unsigned int matched:1;
-
- /* the following are used to support collapsing threads */
- unsigned int collapsed:1; /* is this message part of a collapsed thread? */
- unsigned int limited:1; /* is this message in a limited view? */
- size_t num_hidden; /* number of hidden messages in this view */
-
- short recipient; /* user_is_recipient()'s return value, cached */
-
- int pair; /* color-pair to use when displaying in the index */
-
- time_t date_sent; /* time when the message was sent (UTC) */
- time_t received; /* time when the message was placed in the mailbox */
- long offset; /* where in the stream does this message begin? */
- int lines; /* how many lines in the body of this message? */
- int index; /* the absolute (unsorted) message number */
- int msgno; /* number displayed to the user */
- int virtual; /* virtual message number */
- int score;
- ENVELOPE *env; /* envelope information */
- BODY *content; /* list of MIME parts */
- char *path;
-#ifdef USE_NNTP
- int article_num;
-#endif
-
- char *tree; /* character string to print thread tree */
- struct thread *thread;
-
-#ifdef MIXMASTER
- LIST *chain;
-#endif
-
-#ifdef USE_POP
- int refno; /* message number on server */
-#endif
-
-#if defined USE_POP || defined USE_IMAP || defined USE_NNTP
- void *data; /* driver-specific data */
-#endif
-
- char *maildir_flags; /* unknown maildir flags */
-} HEADER;
-
typedef struct thread {
unsigned int fake_thread:1;
unsigned int duplicate_thread:1;
/* flag to mutt_pattern_comp() */
-#define M_FULL_MSG 1 /* enable body and header matching */
+#define M_FULL_MSG (1<<0) /* enable body and header matching */
typedef enum {
M_MATCH_FULL_ADDRESS = 1
typedef struct pattern_t {
short op;
- short not;
- short alladdr;
+ unsigned int not : 1;
+ unsigned int alladdr : 1;
+ unsigned int stringmatch : 1;
int min;
int max;
struct pattern_t *next;
struct pattern_t *child; /* arguments to logical op */
+ char* str;
regex_t *rx;
} pattern_t;
int appended; /* how many saved messages? */
int flagged; /* how many flagged messages */
int msgnotreadyet; /* which msg "new" in pager, -1 if none */
-#if defined USE_POP || defined USE_IMAP || defined USE_NNTP
void *data; /* driver specific data */
-#endif /* USE_IMAP */
short magic; /* mailbox type */
-#ifdef USE_COMPRESSED
void *compressinfo; /* compressed mbox module private data */
char *realpath; /* path to compressed mailbox */
-#endif /* USE_COMPRESSED */
unsigned int locked:1; /* is the mailbox locked? */
unsigned int changed:1; /* mailbox has been modified */
unsigned int counting:1; /* do we just want to cound? */
} CONTEXT;
-#include "ascii.h"
-#include "alias.h"
-#include "buffer.h"
-#include "state.h"
-#include "enter.h"
+/* for attachment counter */
+typedef struct {
+ char *major;
+ int major_int;
+ const char *minor;
+ regex_t minor_rx;
+} ATTACH_MATCH;
+
+/* Flags for mutt_count_body_parts() */
+#define M_PARTS_TOPLEVEL (1<<0) /* is the top-level part */
+#define M_PARTS_RECOUNT (1<<1) /* force recount */
+
#include "protos.h"
#include "lib.h"
#include "globals.h"