When we're cleaning up a path of "/" in relative mode, we must make
[rsync/rsync.git] / exclude.c
index eb2353c..fdb5c77 100644 (file)
--- a/exclude.c
+++ b/exclude.c
@@ -298,7 +298,7 @@ static char *parse_merge_name(const char *merge_file, unsigned int *len_ptr,
                        strlcpy(to, merge_file, *len_ptr + 1);
                        merge_file = to;
                }
-               if (!sanitize_path(fn, merge_file, r, dirbuf_depth)) {
+               if (!sanitize_path(fn, merge_file, r, dirbuf_depth, NULL)) {
                        rprintf(FERROR, "merge-file name overflows: %s\n",
                                merge_file);
                        return NULL;
@@ -500,6 +500,8 @@ static int rule_matches(char *name, struct filter_struct *ex, int name_is_dir)
        char *p, *pattern = ex->pattern;
        const char *strings[16]; /* more than enough */
 
+       if (*name == '/')
+               name++;
        if (!*name)
                return 0;
 
@@ -531,8 +533,6 @@ static int rule_matches(char *name, struct filter_struct *ex, int name_is_dir)
        if (*pattern == '/') {
                anchored_match = 1;
                pattern++;
-               if (strings[0][0] == '/')
-                       strings[0]++;
        }
 
        if (!anchored_match && ex->u.slash_cnt
@@ -861,7 +861,7 @@ static char default_cvsignore[] =
        " *.a *.olb *.o *.obj *.so *.exe"
        " *.Z *.elc *.ln core"
        /* The rest we added to suit ourself. */
-       " .svn/";
+       " .svn/ .bzr/";
 
 static void get_cvs_excludes(uint32 mflags)
 {