]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix Exclude Dir Containing ignored when scanning the top_level dir
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 9 Sep 2009 14:46:36 +0000 (16:46 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 9 Sep 2009 14:46:36 +0000 (16:46 +0200)
bacula/src/findlib/find.c
bacula/src/findlib/find.h
bacula/src/findlib/find_one.c

index d089b703a8cbe990048f2e18b7d2a2999bba4006..38344f3ad5450f06c295808945dcb0985f981c61 100644 (file)
@@ -274,8 +274,6 @@ static bool accept_file(FF_PKT *ff)
       basename = ff->fname;
    }
 
-   ff->ignoredir = incexe->ignoredir;
-
    for (j = 0; j < incexe->opts_list.size(); j++) {
       findFOPTS *fo = (findFOPTS *)incexe->opts_list.get(j);
       ff->flags = fo->flags;
index ff9be472eb277fc9f55cdf42a7ff3c450da34e51..707f5290fb07a4fede1223f95e7795d4015b5c78 100644 (file)
@@ -215,7 +215,6 @@ struct FF_PKT {
    uint32_t flags;                    /* backup options */
    int GZIP_level;                    /* compression level */
    int strip_path;                    /* strip path count */
-   char *ignoredir;                   /* ignore directories with this file */
    bool cmd_plugin;                   /* set if we have a command plugin */
    alist fstypes;                     /* allowed file system types */
    alist drivetypes;                  /* allowed drive types */
index 5619ea43a876caea2a71a642dc514f2761fcf14a..f4f2e7be804638f3f78fe2a7917b7256c418781d 100644 (file)
@@ -299,6 +299,29 @@ static bool check_changes(JCR *jcr, FF_PKT *ff_pkt)
    return true;
 }
 
+static bool have_ignoredir(FF_PKT *ff_pkt)
+{
+   struct stat sb;
+   char tmp_name[MAXPATHLEN];
+   char *ignoredir = ff_pkt->fileset->incexe->ignoredir;
+   
+   if (ignoredir) {
+      if (strlen(ff_pkt->fname) + strlen(ignoredir) + 2 > MAXPATHLEN) {
+         return false;
+      }
+
+      strcpy(tmp_name, ff_pkt->fname);
+      strcat(tmp_name, "/");
+      strcat(tmp_name, ignoredir);
+      if (stat(tmp_name, &sb) == 0) {
+         Dmsg2(100, "Directory '%s' ignored (found %s)\n",
+               ff_pkt->fname, ignoredir);
+         return true;      /* Just ignore this directory */
+      } 
+   }
+   return false;
+}
+
 /*
  * Find a single file.
  * handle_file is the callback for handling the file.
@@ -551,22 +574,8 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
        * Ignore this directory and everything below if the file .nobackup
        * (or what is defined for IgnoreDir in this fileset) exists
        */
-      if (ff_pkt->ignoredir != NULL) {
-         struct stat sb;
-         char fname[MAXPATHLEN];
-
-         if (strlen(ff_pkt->fname) + strlen("/") +
-            strlen(ff_pkt->ignoredir) + 1 > MAXPATHLEN)
-            return 1;   /* Is this wisdom? */
-
-         strcpy(fname, ff_pkt->fname);
-         strcat(fname, "/");
-         strcat(fname, ff_pkt->ignoredir);
-         if (stat(fname, &sb) == 0) {
-            Dmsg2(100, "Directory '%s' ignored (found %s)\n",
-               ff_pkt->fname, ff_pkt->ignoredir);
-            return 1;      /* Just ignore this directory */
-         }
+      if (have_ignoredir(ff_pkt)) {
+         return 1; /* Just ignore this directory */
       }
 
       /* Build a canonical directory name with a trailing slash in link var */