X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=pattern.c;h=1eee48c52b2857192de268e47db1e551077755e9;hp=35cdbd91f3e8bf419483f01c37e13dee8d1561e2;hb=916e4872caf252a5850e64f79427b9dd7808435d;hpb=63b91e68a864bbd052b4b421cb77a0fd2a748ea4 diff --git a/pattern.c b/pattern.c index 35cdbd9..1eee48c 100644 --- a/pattern.c +++ b/pattern.c @@ -7,36 +7,21 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include +#include #include +#include +#include +#include #include "mutt.h" +#include "alias.h" #include "handler.h" -#include "enter.h" -#include "mx.h" #include "keymap.h" #include "copy.h" #include -#include -#include -#include -#include -#include -#include - #include static int eat_regexp (pattern_t * pat, BUFFER *, BUFFER *); @@ -48,59 +33,56 @@ struct pattern_flags { int tag; /* character used to represent this op */ int op; /* operation to perform */ int class; - int (*eat_arg) (pattern_t *, BUFFER *, BUFFER *); + int (*eat_arg)(pattern_t *, BUFFER *, BUFFER *); } Flags[] = { - { - 'A', M_ALL, 0, NULL}, { - 'b', M_BODY, M_FULL_MSG, eat_regexp}, { - 'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp}, { - 'c', M_CC, 0, eat_regexp}, { - 'C', M_RECIPIENT, 0, eat_regexp}, { - 'd', M_DATE, 0, eat_date}, { - 'D', M_DELETED, 0, NULL}, { - 'e', M_SENDER, 0, eat_regexp}, { - 'E', M_EXPIRED, 0, NULL}, { - 'f', M_FROM, 0, eat_regexp}, { - 'F', M_FLAG, 0, NULL}, { - 'g', M_CRYPT_SIGN, 0, NULL}, { - 'G', M_CRYPT_ENCRYPT, 0, NULL}, { - 'h', M_HEADER, M_FULL_MSG, eat_regexp}, { - 'H', M_HORMEL, 0, eat_regexp}, { - 'i', M_ID, 0, eat_regexp}, { - 'k', M_PGP_KEY, 0, NULL}, { - 'L', M_ADDRESS, 0, eat_regexp}, { - 'l', M_LIST, 0, NULL}, { - 'm', M_MESSAGE, 0, eat_range}, { - 'M', M_MULTIPART, 0, NULL}, { - 'n', M_SCORE, 0, eat_range}, { - 'N', M_NEW, 0, NULL}, { - 'O', M_OLD, 0, NULL}, { - 'p', M_PERSONAL_RECIP, 0, NULL}, { - 'P', M_PERSONAL_FROM, 0, NULL}, { - 'Q', M_REPLIED, 0, NULL}, { - 'R', M_READ, 0, NULL}, { - 'r', M_DATE_RECEIVED, 0, eat_date}, { - 's', M_SUBJECT, 0, eat_regexp}, { - 'S', M_SUPERSEDED, 0, NULL}, { - 'T', M_TAG, 0, NULL}, { - 't', M_TO, 0, eat_regexp}, { - 'U', M_UNREAD, 0, NULL}, { - 'u', M_SUBSCRIBED_LIST, 0, NULL}, { - 'v', M_COLLAPSED, 0, NULL}, { - 'V', M_CRYPT_VERIFIED, 0, NULL}, + {'A', M_ALL, 0, NULL}, + {'b', M_BODY, M_FULL_MSG, eat_regexp}, + {'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp}, + {'c', M_CC, 0, eat_regexp}, + {'C', M_RECIPIENT, 0, eat_regexp}, + {'d', M_DATE, 0, eat_date}, + {'D', M_DELETED, 0, NULL}, + {'e', M_SENDER, 0, eat_regexp}, + {'E', M_EXPIRED, 0, NULL}, + {'f', M_FROM, 0, eat_regexp}, + {'F', M_FLAG, 0, NULL}, + {'g', M_CRYPT_SIGN, 0, NULL}, + {'G', M_CRYPT_ENCRYPT, 0, NULL}, + {'h', M_HEADER, M_FULL_MSG, eat_regexp}, + {'H', M_HORMEL, 0, eat_regexp}, + {'i', M_ID, 0, eat_regexp}, + {'k', M_PGP_KEY, 0, NULL}, + {'L', M_ADDRESS, 0, eat_regexp}, + {'l', M_LIST, 0, NULL}, + {'m', M_MESSAGE, 0, eat_range}, + {'M', M_MULTIPART, 0, NULL}, + {'n', M_SCORE, 0, eat_range}, + {'N', M_NEW, 0, NULL}, + {'O', M_OLD, 0, NULL}, + {'p', M_PERSONAL_RECIP, 0, NULL}, + {'P', M_PERSONAL_FROM, 0, NULL}, + {'Q', M_REPLIED, 0, NULL}, + {'R', M_READ, 0, NULL}, + {'r', M_DATE_RECEIVED, 0, eat_date}, + {'s', M_SUBJECT, 0, eat_regexp}, + {'S', M_SUPERSEDED, 0, NULL}, + {'T', M_TAG, 0, NULL}, + {'t', M_TO, 0, eat_regexp}, + {'U', M_UNREAD, 0, NULL}, + {'u', M_SUBSCRIBED_LIST, 0, NULL}, + {'v', M_COLLAPSED, 0, NULL}, + {'V', M_CRYPT_VERIFIED, 0, NULL}, #ifdef USE_NNTP - { - 'w', M_NEWSGROUPS, 0, eat_regexp}, + {'w', M_NEWSGROUPS, 0, eat_regexp}, #endif - { - 'x', M_REFERENCE, 0, eat_regexp}, { - 'X', M_MIMEATTACH, 0, eat_range}, { - 'y', M_XLABEL, 0, eat_regexp}, { - 'z', M_SIZE, 0, eat_range}, { - '=', M_DUPLICATED, 0, NULL}, { - '$', M_UNREFERENCED, 0, NULL}, { - '*', M_REALNAME, 0, NULL}, { - 0, 0, 0, NULL} + {'x', M_REFERENCE, 0, eat_regexp}, + {'X', M_MIMEATTACH, 0, eat_range}, + {'y', M_XLABEL, 0, eat_regexp}, + {'z', M_SIZE, 0, eat_range}, + {'=', M_DUPLICATED, 0, NULL}, + {'$', M_UNREFERENCED, 0, NULL}, + {'*', M_REALNAME, 0, NULL}, + {0, 0, 0, NULL} }; static pattern_t *SearchPattern = NULL; /* current search pattern */ @@ -120,19 +102,6 @@ static char LastSearchExpn[LONG_STRING] = { 0 }; /* expanded version of #define M_PDR_ERROR 0x0100 #define M_PDR_ERRORDONE (M_PDR_ERROR | M_PDR_DONE) - -int mutt_getvaluebychar (char ch, struct mapping_t *table) -{ - int i; - - for (i = 0; table[i].name; i++) { - if (ch == table[i].name[0]) - return table[i].value; - } - - return (-1); -} - /* if no uppercase letters are given, do a case-insensitive search */ int mutt_which_case (const char *s) { @@ -164,9 +133,9 @@ msg_search (CONTEXT *ctx, pattern_t* pat, int msgno) p_clear(&s, 1); s.fpin = msg->fp; s.flags = M_CHARCONV; - mutt_mktemp (tempfile); - if ((s.fpout = safe_fopen (tempfile, "w+")) == NULL) { - mutt_perror (tempfile); + s.fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + if (!s.fpout) { + mutt_error(_("Could not create temporary file")); return (0); } @@ -180,7 +149,7 @@ msg_search (CONTEXT *ctx, pattern_t* pat, int msgno) { mx_close_message (&msg); if (fp) { - fclose (fp); + m_fclose(&fp); unlink (tempfile); } return (0); @@ -231,7 +200,7 @@ msg_search (CONTEXT *ctx, pattern_t* pat, int msgno) mx_close_message (&msg); if (option (OPTTHOROUGHSRC)) { - fclose (fp); + m_fclose(&fp); unlink (tempfile); } } @@ -891,7 +860,7 @@ static int match_adrlist (pattern_t* pat, int match_personal, int alladdr __attr return pat->alladdr; /* No matches, or all matches if alladdr */ } -static int match_reference (pattern_t* pat, LIST * refs) +static int match_reference (pattern_t* pat, string_list_t * refs) { for (; refs; refs = refs->next) if (patmatch (pat, refs->data) == 0) @@ -1091,7 +1060,7 @@ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, else { mutt_parse_mime_message(ctx, h); count = mutt_count_body_parts(h, 0); - mutt_free_body(&h->content->parts); + body_list_wipe(&h->content->parts); } return (pat->not ^ (count >= pat->min && (pat->max == M_MAXRANGE || @@ -1109,17 +1078,13 @@ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, * - or we have an alias for current address * - or From: contains valid email address _and_ name has >= 2 fields */ - return (pat-> - not ^ (h->env && h->env->from && (mutt_addr_is_user (h->env->from) - || - (alias_reverse_lookup - (h->env->from) != NULL) - || (h->env->from->personal - && valid_realname (h->env-> - from-> - personal) - && h->env->from->mailbox) - ))); + return (h->env && h->env->from + && (mutt_addr_is_user(h->env->from) + || alias_reverse_lookup(h->env->from) + || (h->env->from->personal + && valid_realname(h->env-> from->personal) + && h->env->from->mailbox) + )) ^ pat->not; #ifdef USE_NNTP case M_NEWSGROUPS: return (pat-> @@ -1146,7 +1111,7 @@ static void quote_simple (char *tmp, ssize_t len, const char *p) } /* convert a simple search into a real request */ -void mutt_check_simple (char *s, size_t len, const char *simple) +void mutt_check_simple (char *s, ssize_t len, const char *simple) { char tmp[LONG_STRING]; @@ -1176,7 +1141,7 @@ void mutt_check_simple (char *s, size_t len, const char *simple) m_strcpy(s, len, "~U"); else { quote_simple (tmp, sizeof (tmp), s); - mutt_expand_fmt (s, len, simple, tmp); + m_file_fmt(s, len, simple, tmp); } } }