From: Thomas Roessler Date: Fri, 2 Oct 1998 17:39:17 +0000 (+0000) Subject: patch-0.92.8.sec.match_all.1 X-Git-Tag: mutt-0-94-10i-rel~14 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b9e0097b2f862180146cc24497337b92dec24174;p=mutt patch-0.92.8.sec.match_all.1 --- diff --git a/Makefile.in b/Makefile.in index bf75798f..a46f9d41 100644 --- a/Makefile.in +++ b/Makefile.in @@ -165,6 +165,23 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP = --best +DEP_FILES = .deps/addrbook.P .deps/alias.P .deps/attach.P \ +.deps/browser.P .deps/buffy.P .deps/charset.P .deps/color.P \ +.deps/commands.P .deps/complete.P .deps/compose.P .deps/copy.P \ +.deps/curs_lib.P .deps/curs_main.P .deps/date.P .deps/dotlock.P \ +.deps/edit.P .deps/enter.P .deps/filter.P .deps/flags.P .deps/from.P \ +.deps/getdomain.P .deps/gnupgparse.P .deps/handler.P .deps/hash.P \ +.deps/hdrline.P .deps/headers.P .deps/help.P .deps/history.P \ +.deps/hook.P .deps/imap.P .deps/init.P .deps/keymap.P .deps/lib.P \ +.deps/main.P .deps/mbox.P .deps/menu.P .deps/mh.P .deps/mutt_dotlock \ +.deps/mutt_dotlock.P .deps/mx.P .deps/pager.P .deps/parse.P \ +.deps/pattern.P .deps/pgp.P .deps/pgpinvoke.P .deps/pgpkey.P \ +.deps/pgppubring.P .deps/pop.P .deps/postpone.P .deps/query.P \ +.deps/recvattach.P .deps/resize.P .deps/rfc1524.P .deps/rfc2047.P \ +.deps/rfc822.P .deps/score.P .deps/send.P .deps/sendlib.P \ +.deps/sha1dgst.P .deps/signal.P .deps/snprintf.P .deps/socket.P \ +.deps/sort.P .deps/status.P .deps/strcasecmp.P .deps/system.P \ +.deps/thread.P SOURCES = mutt_dotlock.c $(mutt_SOURCES) $(EXTRA_mutt_SOURCES) OBJECTS = mutt_dotlock.o $(mutt_OBJECTS) @@ -173,9 +190,9 @@ all: all-recursive-am all-am .SUFFIXES: .SUFFIXES: .S .c .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status @@ -235,9 +252,6 @@ uninstall-binPROGRAMS: rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ done -.c.o: - $(COMPILE) -c $< - .s.o: $(COMPILE) -c $< @@ -363,6 +377,11 @@ distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ test -f $(distdir)/$$file \ @@ -377,6 +396,30 @@ distdir: $(DISTFILES) (cd $$subdir && $(MAKE) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + +maintainer-clean-depend: + -rm -rf .deps + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).P -c $< + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).p -c $< + @-sed -e 's/^\([^:]*\)\.o:/\1.lo \1.o:/' \ + < .deps/$(*F).p > .deps/$(*F).P + @-rm -f .deps/$(*F).p info: info-recursive dvi: dvi-recursive check: all-am @@ -423,18 +466,20 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ - mostlyclean-compile mostlyclean-tags \ + mostlyclean-compile mostlyclean-tags mostlyclean-depend \ mostlyclean-generic clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ - clean-generic mostlyclean-am + clean-depend clean-generic mostlyclean-am distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ - distclean-tags distclean-generic clean-am + distclean-tags distclean-depend distclean-generic \ + clean-am maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-tags \ - maintainer-clean-generic distclean-am + maintainer-clean-depend maintainer-clean-generic \ + distclean-am mostlyclean: mostlyclean-recursive mostlyclean-am @@ -458,11 +503,13 @@ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ -installcheck all-recursive-am all-am install-exec-am uninstall-am \ -install-exec install-data install uninstall all installdirs \ -mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info dvi installcheck all-recursive-am all-am \ +install-exec-am uninstall-am install-exec install-data install \ +uninstall all installdirs mostlyclean-generic distclean-generic \ +clean-generic maintainer-clean-generic clean mostlyclean distclean \ +maintainer-clean mutt_dotlock.c: dotlock.c diff --git a/mutt.h b/mutt.h index ff134c3a..918d218b 100644 --- a/mutt.h +++ b/mutt.h @@ -576,6 +576,7 @@ typedef struct pattern_t { short op; short not; + short alladdr; int min; int max; struct pattern_t *next; diff --git a/pattern.c b/pattern.c index 6b9fe894..594252d7 100644 --- a/pattern.c +++ b/pattern.c @@ -546,6 +546,7 @@ pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err) pattern_t *tmp; pattern_t *last = NULL; int not = 0; + int alladdr = 0; int or = 0; int implicit = 1; /* used to detect logical AND operator */ struct pattern_flags *entry; @@ -562,6 +563,10 @@ pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err) SKIPWS (ps.dptr); switch (*ps.dptr) { + case '^': + ps.dptr++; + alladdr = !alladdr; + break; case '!': ps.dptr++; not = !not; @@ -590,6 +595,7 @@ pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err) ps.dptr++; implicit = 0; not = 0; + alladdr = 0; break; case '~': if (implicit && or) @@ -605,7 +611,9 @@ pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err) tmp = new_pattern (); tmp->not = not; + tmp->alladdr = alladdr; not = 0; + alladdr=0; if (last) last->next = tmp; @@ -670,7 +678,9 @@ pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err) curlist = tmp; last = tmp; tmp->not = not; + tmp->alladdr = alladdr; not = 0; + alladdr = 0; ps.dptr = p + 1; /* restore location */ break; default: @@ -712,15 +722,17 @@ perform_or (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER return 0; } -static int match_adrlist (regex_t *rx, int match_personal, ADDRESS *a) +static int match_adrlist (regex_t *rx, int match_personal, ADDRESS *a, short alladdr) { + if (a==NULL) + return 0; for (; a; a = a->next) { - if ((a->mailbox && regexec (rx, a->mailbox, 0, NULL, 0) == 0) || - (match_personal && a->personal && regexec (rx, a->personal, 0, NULL, 0) == 0)) - return 1; + if (alladdr^((a->mailbox && regexec (rx, a->mailbox, 0, NULL, 0) == 0) || + (match_personal && a->personal && regexec (rx, a->personal, 0, NULL, 0) == 0))) + return alladdr^1; } - return 0; + return alladdr^0; } static int match_reference (regex_t *rx, LIST *refs) @@ -786,13 +798,13 @@ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, case M_WHOLE_MSG: return (pat->not ^ msg_search (ctx, pat->rx, buf, sizeof (buf), pat->op, h->msgno)); case M_SENDER: - return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->sender)); + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->sender,pat->alladdr)); case M_FROM: - return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->from)); + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->from,pat->alladdr)); case M_TO: - return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->to)); + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->to,pat->alladdr)); case M_CC: - return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->cc)); + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->cc,pat->alladdr)); case M_SUBJECT: return (pat->not ^ (h->env->subject && regexec (pat->rx, h->env->subject, 0, NULL, 0) == 0)); case M_ID: @@ -805,14 +817,14 @@ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, case M_REFERENCE: return (pat->not ^ match_reference (pat->rx, h->env->references)); case M_ADDRESS: - return (pat->not ^ (match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->from) || - match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->sender) || - match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->to) || - match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->cc))); + return (pat->not ^ (match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->from,pat->alladdr) || + match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->sender,pat->alladdr) || + match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->to,pat->alladdr) || + match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->cc,pat->alladdr))); break; case M_RECIPIENT: - return (pat->not ^ (match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->to) || - match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->cc))); + return (pat->not ^ (match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->to,pat->alladdr) || + match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, h->env->cc,pat->alladdr))); break; case M_LIST: return (pat->not ^ (mutt_is_list_recipient (h->env->to) ||