]> err.no Git - dpkg/commitdiff
Move filtering function to filters.c
authorTollef Fog Heen <tfheen@err.no>
Sun, 20 Jan 2008 20:46:19 +0000 (21:46 +0100)
committerTollef Fog Heen <tfheen@err.no>
Sun, 20 Jan 2008 20:46:19 +0000 (21:46 +0100)
Move checking for filtering to filters.c and add appropriate #includes
to filters.h and archives.c.

src/archives.c
src/filters.c
src/filters.h

index 90a74e4a8cdca6a21fec7de25e5c59a1ac519d3c..f81ccbd29c4070aed9400d6ba42c8cfb723b8152 100644 (file)
@@ -407,44 +407,7 @@ int tarobject(struct TarInfo *ti) {
         nifd->namenode->divert && nifd->namenode->divert->useinstead
         ? nifd->namenode->divert->useinstead->name : "<none>");
 
-  if (filters) {
-    int remove = 0;
-    struct filterlist *f;
-
-    /* Last match wins */
-    for (f = filters; f != NULL; f = f->next) {
-      debug(dbg_eachfile, "tarobject comparing '%s' and '%s'", &ti->Name[1], f->filterstring);
-      if (fnmatch(f->filterstring, &ti->Name[1], 0) == 0) {
-       if (f->positive == 0) {
-         remove = 1;
-         debug(dbg_eachfile, "tarobject removing %s", ti->Name);
-       } else {
-         remove = 0;
-         debug(dbg_eachfile, "tarobject including %s", ti->Name);
-  
-       }
-      }
-    }
-
-    if (remove) {
-      for (f = filters; f != NULL; f = f->next) {
-       char *pattern;
-       
-       pattern = malloc(strlen(ti->Name) + 1);
-       strcpy(pattern, &ti->Name[1]);
-       strcat(pattern, "*");
-       
-       debug(dbg_eachfile, "tarobject seeing if '%s' needs to be reincluded", &ti->Name[1]);
-       if ((f->positive == 1) && 
-           (ti->Type == Directory) &&
-           (fnmatch(pattern, f->filterstring, 0) == 0)) {
-         remove = 0;
-         debug(dbg_eachfile, "tarobject reincluding %s", ti->Name);
-       }
-      }
-    }
-
-    if (remove) {
+  if (filter_should_skip(ti) == 1) {
       struct filenamenode *fnn = findnamenode(ti->Name, 0);
       fnn->flags &= ~fnnf_new_inarchive;
       obstack_free(&tar_obs, nifd);
@@ -461,7 +424,6 @@ int tarobject(struct TarInfo *ti) {
        if (r > 0) r= safe_read(tc->backendpipe,databuf,TARBLKSZ - r);
       }
       return 0;
-    }
   }
 
   if (nifd->namenode->divert && nifd->namenode->divert->camefrom) {
index 702a70e9c0021034f80ee32108a67a3d31fb4478..ae69dbcfeeda8c3628a9462f1f36014a9233c207 100644 (file)
 #include <sys/stat.h>
 #include <dirent.h>
 #include <errno.h>
+#include <fnmatch.h>
 
 #include <dpkg.h>
 
 #include "filters.h"
+#include "main.h"
 
 struct filterlist *filters = NULL;
 
@@ -120,3 +122,44 @@ void loadfilters(void) {
   }
   closedir(dir);
 }
+
+int filter_should_skip(struct TarInfo *ti) {
+  int remove = 0;
+  if (filters) {
+    struct filterlist *f;
+
+    /* Last match wins */
+    for (f = filters; f != NULL; f = f->next) {
+      debug(dbg_eachfile, "tarobject comparing '%s' and '%s'", &ti->Name[1], f->filterstring);
+      if (fnmatch(f->filterstring, &ti->Name[1], 0) == 0) {
+       if (f->positive == 0) {
+         remove = 1;
+         debug(dbg_eachfile, "do_filter removing %s", ti->Name);
+       } else {
+         remove = 0;
+         debug(dbg_eachfile, "do_filter including %s", ti->Name);
+       }
+      }
+    }
+
+    if (remove) {
+      for (f = filters; f != NULL; f = f->next) {
+       char *pattern;
+
+       pattern = malloc(strlen(ti->Name) + 1);
+       strcpy(pattern, &ti->Name[1]);
+       strcat(pattern, "*");
+
+       debug(dbg_eachfile, 
+             "tarobject seeing if '%s' needs to be reincluded", &ti->Name[1]);
+       if ((f->positive == 1) &&
+           (ti->Type == Directory) &&
+           (fnmatch(pattern, f->filterstring, 0) == 0)) {
+         remove = 0;
+         debug(dbg_eachfile, "tarobject reincluding %s", ti->Name);
+       }
+      }
+    }
+  }
+  return remove;
+}
index d4dba5c29490a53357e19cb8acf6411d3ec8f995..c1de3087493bcaee2ebe079f55931ba26e19c5be 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#include "tarfn.h"
+
 void loadfilter(char *fn);
 void loadfilters(void);
+int filter_should_skip(struct TarInfo *ti);
 
 struct filterlist {
   int positive;