X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/55c412630cb5f3b1cece481400846bec77733c01..97bf86f8ee5794087e8627b04dd93c7506ae552f:/exclude.c diff --git a/exclude.c b/exclude.c index bc180f20..dc1a4754 100644 --- a/exclude.c +++ b/exclude.c @@ -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 @@ -1102,7 +1102,8 @@ static void send_rules(int f_out, struct filter_list_struct *flp) elide = am_sender ? 1 : -1; if (ent->match_flags & MATCHFLG_RECEIVER_SIDE) elide = elide ? 0 : am_sender ? -1 : 1; - else if (delete_excluded && !elide) + else if (delete_excluded && !elide + && (!(ent->match_flags & MATCHFLG_PERDIR_MERGE) || ent->match_flags & MATCHFLG_CVS_IGNORE)) elide = am_sender ? 1 : -1; if (elide < 0) { if (prev)