X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffindlib%2Ffind.c;h=d089b703a8cbe990048f2e18b7d2a2999bba4006;hb=4d2f1c844510c9abb9ecf6f0283437862c4a3bfb;hp=88b0bd08d494fc9828696fb1b25e94098c97b232;hpb=ab26b486ce077fe2a52e6afd7f8d7a3b4fb4442d;p=bacula%2Fbacula diff --git a/bacula/src/findlib/find.c b/bacula/src/findlib/find.c index 88b0bd08d4..d089b703a8 100644 --- a/bacula/src/findlib/find.c +++ b/bacula/src/findlib/find.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2009 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -20,7 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - Bacula® is a registered trademark of John Walker. + Bacula® is a registered trademark of Kern Sibbald. The licensor of Bacula is the Free Software Foundation Europe (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. @@ -67,13 +67,13 @@ FF_PKT *init_find_files() /* Get system path and filename maximum lengths */ path_max = pathconf(".", _PC_PATH_MAX); - if (path_max < 1024) { - path_max = 1024; + if (path_max < 2048) { + path_max = 2048; } name_max = pathconf(".", _PC_NAME_MAX); - if (name_max < 1024) { - name_max = 1024; + if (name_max < 2048) { + name_max = 2048; } path_max++; /* add for EOS */ name_max++; /* add for EOS */ @@ -99,7 +99,7 @@ set_find_options(FF_PKT *ff, int incremental, time_t save_time) void set_find_changed_function(FF_PKT *ff, bool check_fct(JCR *jcr, FF_PKT *ff)) { - Dmsg0(1, "Enter set_find_changed_function()\n"); + Dmsg0(100, "Enter set_find_changed_function()\n"); ff->check_fct = check_fct; } @@ -215,6 +215,44 @@ find_files(JCR *jcr, FF_PKT *ff, int file_save(JCR *jcr, FF_PKT *ff_pkt, bool to return 1; } +/* + * Test if the currently selected directory (in ff->fname) is + * explicitly in the Include list or explicitly in the Exclude + * list. + */ +bool is_in_fileset(FF_PKT *ff) +{ + dlistString *node; + char *fname; + int i; + findINCEXE *incexe; + findFILESET *fileset = ff->fileset; + if (fileset) { + for (i=0; iinclude_list.size(); i++) { + incexe = (findINCEXE *)fileset->include_list.get(i); + foreach_dlist(node, &incexe->name_list) { + fname = node->c_str(); + Dmsg2(100, "Inc fname=%s ff->fname=%s\n", fname, ff->fname); + if (strcmp(fname, ff->fname) == 0) { + return true; + } + } + } + for (i=0; iexclude_list.size(); i++) { + incexe = (findINCEXE *)fileset->exclude_list.get(i); + foreach_dlist(node, &incexe->name_list) { + fname = node->c_str(); + Dmsg2(100, "Exc fname=%s ff->fname=%s\n", fname, ff->fname); + if (strcmp(fname, ff->fname) == 0) { + return true; + } + } + } + } + return false; +} + + static bool accept_file(FF_PKT *ff) { int i, j, k; @@ -236,6 +274,8 @@ 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;