X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/65e248709676a2633d1c7beb52b31eaeba174312..a9ac4411e5943a277d53f7387e75580fc7027504:/exclude.c diff --git a/exclude.c b/exclude.c index 8dab79fe..a9dee7bd 100644 --- a/exclude.c +++ b/exclude.c @@ -115,10 +115,13 @@ void clear_exclude_list(struct exclude_list_struct *listp) static int check_one_exclude(char *name, struct exclude_struct *ex, int name_is_dir) { - char *p; + char *p, full_name[MAXPATHLEN]; int match_start = 0; char *pattern = ex->pattern; + if (!*name) + return 0; + /* If the pattern does not have any slashes AND it does not have * a "**" (which could match a slash), then we just match the * name portion of the path. */ @@ -126,15 +129,12 @@ static int check_one_exclude(char *name, struct exclude_struct *ex, if ((p = strrchr(name,'/')) != NULL) name = p+1; } - else if (ex->match_flags & MATCHFLG_ABS_PATH && *name != '/') { - static char full_name[MAXPATHLEN]; - int plus = curr_dir[1] == '\0'? 1 : 0; - pathjoin(full_name, sizeof full_name, curr_dir+plus, name); + else if (ex->match_flags & MATCHFLG_ABS_PATH && *name != '/' + && curr_dir[1]) { + pathjoin(full_name, sizeof full_name, curr_dir + 1, name); name = full_name; } - if (!name[0]) return 0; - if (ex->match_flags & MATCHFLG_DIRECTORY && !name_is_dir) return 0; @@ -322,7 +322,7 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname, { FILE *fp; char line[MAXPATHLEN+3]; /* Room for "x " prefix and trailing slash. */ - char *eob = line + MAXPATHLEN - 1; + char *eob = line + sizeof line - 1; int word_split = xflags & XFLG_WORD_SPLIT; if (!fname || !*fname)