]> granicus.if.org Git - neomutt/commitdiff
patch-0.92.8.sec.match_all.1
authorThomas Roessler <roessler@does-not-exist.org>
Fri, 2 Oct 1998 17:39:17 +0000 (17:39 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Fri, 2 Oct 1998 17:39:17 +0000 (17:39 +0000)
Makefile.in
mutt.h
pattern.c

index bf75798f8834f8a38d2ff2af2072e795e805fcd0..a46f9d41c63c7aa335d4fed4ae0aa134708a516f 100644 (file)
@@ -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 ff134c3a90c8cd7191a867c475b6cdb013aa8a44..918d218bb33e003678d2a448e77537f2242c86ed 100644 (file)
--- 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;
index 6b9fe894c3e0a1337aaaf022f6d33dc134a47131..594252d7cfc6f0127d04d653ae945c759c8810b7 100644 (file)
--- 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) ||