INN commit: trunk/storage (expire.c ov.c ovinterface.h)

INN Commit rra at isc.org
Fri Jan 22 23:20:31 UTC 2010


    Date: Friday, January 22, 2010 @ 15:20:31
  Author: iulius
Revision: 8917

Optimize how ovgrouppat is handled.  Thanks to D. Stussy
for the suggestion.

Modified:
  trunk/storage/expire.c
  trunk/storage/ov.c
  trunk/storage/ovinterface.h

---------------+
 expire.c      |   44 ++------------------------------------------
 ov.c          |   18 ++++--------------
 ovinterface.h |    3 ---
 3 files changed, 6 insertions(+), 59 deletions(-)

Modified: expire.c
===================================================================
--- expire.c	2010-01-22 22:55:37 UTC (rev 8916)
+++ expire.c	2010-01-22 23:20:31 UTC (rev 8917)
@@ -4,8 +4,8 @@
 **
 **  In order to expire on a per-newsgroup (instead of per-storage-class)
 **  basis, one has to use overview-driven expiration.  This contains all of
-**  the code to do that.  It provides OVgroupbasedexpire, OVhisthasmsgid, and
-**  OVgroupmatch for the use of various overview methods.
+**  the code to do that.  It provides OVgroupbasedexpire and OVhisthasmsgid
+**  for the use of various overview methods.
 */
 
 #include "config.h"
@@ -101,8 +101,6 @@
 bool     OVkeep;
 bool     OVearliest;
 bool     OVquiet;
-int      OVnumpatterns;
-char **  OVpatterns;
 
 
 /*
@@ -813,39 +811,6 @@
     return HISlookup(h, p, NULL, NULL, NULL, NULL);
 }
 
-/*
-**  Return the matching status of the group (UWILDMAT_MATCH,
-**  UWILDMAT_FAIL, or UWILDMAT_POISON).
-*/
-enum uwildmat
-OVgroupmatch(const char *group)
-{
-    int i;
-    enum uwildmat result = UWILDMAT_FAIL;
-
-    if (OVnumpatterns == 0 || group == NULL)
-        return true;
-    for (i = 0; i < OVnumpatterns; i++) {
-        switch (OVpatterns[i][0]) {
-        case '!':
-            if (uwildmat(group, &OVpatterns[i][1])) {
-                result = UWILDMAT_FAIL;
-            }
-            break;
-        case '@':
-            if (uwildmat(group, &OVpatterns[i][1])) {
-                result = UWILDMAT_POISON;
-            }
-            break;
-        default:
-            if (uwildmat(group, OVpatterns[i])) {
-                result = UWILDMAT_MATCH;
-            }
-        }
-    }
-    return result;
-}
-
 void
 OVEXPcleanup(void)
 {
@@ -862,11 +827,6 @@
         }
         EXPprocessed = EXPunlinked = EXPoverindexdrop = 0;
     }
-    if (innconf->ovgrouppat != NULL) {
-        for (i = 0 ; i < OVnumpatterns ; i++)
-            free(OVpatterns[i]);
-        free(OVpatterns);
-    }
     for (bg = EXPbadgroups; bg; bg = bgnext) {
         bgnext = bg->Next;
         free(bg->Name);

Modified: ov.c
===================================================================
--- ov.c	2010-01-22 22:55:37 UTC (rev 8916)
+++ ov.c	2010-01-22 23:20:31 UTC (rev 8917)
@@ -36,7 +36,6 @@
 {
     int	i;
     bool val;
-    char *p;
 
     if (ov.open)
 	/* already opened */
@@ -68,17 +67,6 @@
 	OVclose();
 	return false;
     }
-    if (innconf->ovgrouppat != NULL) {
-	for (i = 1, p = innconf->ovgrouppat; *p && (p = strchr(p+1, ',')); i++);
-	OVnumpatterns = i;
-	OVpatterns = xmalloc(OVnumpatterns * sizeof(char *));
-	for (i = 0, p = strtok(innconf->ovgrouppat, ","); p != NULL && i <= OVnumpatterns ; i++, p = strtok(NULL, ","))
-	    OVpatterns[i] = xstrdup(p);
-	if (i != OVnumpatterns) {
-            warn("extra ',' in pattern");
-	    return false;
-	}
-    }
     return val;
 }
 
@@ -202,7 +190,7 @@
                 return OVADDFAILED;
             *nextcheck++ = '\0';
 
-            groupmatch = OVgroupmatch(group);
+            groupmatch = uwildmat_poison(group, innconf->ovgrouppat);
             if (groupmatch == UWILDMAT_POISON) {
                 return OVADDGROUPNOMATCH;
             } else if (groupmatch == UWILDMAT_FAIL) {
@@ -229,8 +217,10 @@
             continue;
 
         /* Skip overview generation according to ovgrouppat. */
-        if (innconf->ovgrouppat != NULL && OVgroupmatch(group) != UWILDMAT_MATCH)
+        if (innconf->ovgrouppat != NULL
+            && uwildmat_poison(group, innconf->ovgrouppat) != UWILDMAT_MATCH) {
             continue;
+        }
 
         sprintf(overdata, "%ld\t", artnum);
         i = strlen(overdata);

Modified: ovinterface.h
===================================================================
--- ovinterface.h	2010-01-22 22:55:37 UTC (rev 8916)
+++ ovinterface.h	2010-01-22 23:20:31 UTC (rev 8917)
@@ -37,7 +37,6 @@
 
 bool OVgroupbasedexpire(TOKEN token, const char *group, const char *data,
                         int len, time_t arrived, time_t expires);
-enum uwildmat OVgroupmatch(const char *group);
 bool OVhisthasmsgid(struct history *, const char *data);
 void OVEXPremove(TOKEN token, bool deletedgroups, char **xref, int ngroups);
 void OVEXPcleanup(void);
@@ -52,8 +51,6 @@
 extern bool OVkeep;
 extern bool OVearliest;
 extern bool OVquiet;
-extern int  OVnumpatterns;
-extern char **OVpatterns;
 extern time_t OVrealnow;
 extern long EXPprocessed;
 extern long EXPunlinked;




More information about the inn-committers mailing list