summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sharpe <sharpe@samba.org>2004-03-18 22:29:54 +0000
committerRichard Sharpe <sharpe@samba.org>2004-03-18 22:29:54 +0000
commit00e8b6d5ce02d021d23bd6b0816504604756b825 (patch)
treeaddca88533371eef38866853341382149465eb51
parent2332bebd9fabc32dbc2756347338dbecc06e527b (diff)
downloadsamba-00e8b6d5ce02d021d23bd6b0816504604756b825.tar.gz
samba-00e8b6d5ce02d021d23bd6b0816504604756b825.tar.bz2
samba-00e8b6d5ce02d021d23bd6b0816504604756b825.zip
Apply Craig Barratt's fixes to allow multiple exlusion files and patterns.
Much of this was applied by hand because of the changes in the code. However, it builds and smbclient seems to work still. The Amanda folks are testing and it seems to work there as well. (This used to be commit 10d05b57c5c66718fb1ca476f7214087ddae29ee)
-rw-r--r--source3/client/clitar.c4
-rw-r--r--source3/lib/util.c14
2 files changed, 16 insertions, 2 deletions
diff --git a/source3/client/clitar.c b/source3/client/clitar.c
index f38d6fe91a..e43b3e4cc5 100644
--- a/source3/client/clitar.c
+++ b/source3/client/clitar.c
@@ -800,7 +800,7 @@ static void do_tar(file_info *finfo)
#ifdef HAVE_REGEX_H
(tar_re_search && !regexec(preg, exclaim, 0, NULL, 0))) {
#else
- (tar_re_search && mask_match(exclaim, cliplist[0], True))) {
+ (tar_re_search && mask_match_list(exclaim, cliplist, clipn, True))) {
#endif
DEBUG(3,("Skipping file %s\n", exclaim));
return;
@@ -1153,7 +1153,7 @@ static void do_tarput(void)
#ifdef HAVE_REGEX_H
(tar_re_search && !regexec(preg, finfo.name, 0, NULL, 0)));
#else
- (tar_re_search && mask_match(finfo.name, cliplist[0], True)));
+ (tar_re_search && mask_match_list(finfo.name, cliplist, clipn, True)));
#endif
DEBUG(5, ("Skip = %i, cliplist=%s, file=%s\n", skip, (cliplist?cliplist[0]:NULL), finfo.name));
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 3a8d627ee9..10d224baab 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -2320,6 +2320,20 @@ BOOL mask_match(const char *string, char *pattern, BOOL is_case_sensitive)
return ms_fnmatch(pattern, string, Protocol, is_case_sensitive) == 0;
}
+/*******************************************************************
+ A wrapper that handles a list of patters and calls mask_match()
+ on each. Returns True if any of the patterns match.
+*******************************************************************/
+
+BOOL mask_match_list(const char *string, char **list, int listLen, BOOL is_case_sensitive)
+{
+ while (listLen-- > 0) {
+ if (mask_match(string, *list++, is_case_sensitive))
+ return True;
+ }
+ return False;
+}
+
/*********************************************************
Recursive routine that is called by unix_wild_match.
*********************************************************/