aboutsummaryrefslogtreecommitdiffstats
path: root/exclude.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2006-10-12 02:14:47 +0000
committerWayne Davison <wayned@samba.org>2006-10-12 02:14:47 +0000
commit798cde474f15ecb653c13249f85da6cb6587893d (patch)
tree574129a1b1d866b576cbe61b191820caad744969 /exclude.c
parent558d482c477b4473eb004d69633799226fdf5a98 (diff)
downloadandroid_external_rsync-798cde474f15ecb653c13249f85da6cb6587893d.tar.gz
android_external_rsync-798cde474f15ecb653c13249f85da6cb6587893d.tar.bz2
android_external_rsync-798cde474f15ecb653c13249f85da6cb6587893d.zip
Some minor improvements to parse_merge_name().
Diffstat (limited to 'exclude.c')
-rw-r--r--exclude.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/exclude.c b/exclude.c
index 5d3ee403..38bbd0cb 100644
--- a/exclude.c
+++ b/exclude.c
@@ -303,24 +303,23 @@ static char *parse_merge_name(const char *merge_file, unsigned int *len_ptr,
merge_file);
return NULL;
}
+ fn_len = strlen(fn);
} else {
strlcpy(fn, merge_file, len_ptr ? *len_ptr + 1 : MAXPATHLEN);
- clean_fname(fn, 1);
+ fn_len = clean_fname(fn, 1);
}
- fn_len = strlen(fn);
- if (fn == buf)
- goto done;
-
- if (dirbuf_len + fn_len >= MAXPATHLEN) {
- rprintf(FERROR, "merge-file name overflows: %s\n", fn);
- return NULL;
+ /* If the name isn't in buf yet, it's wasn't absolute. */
+ if (fn != buf) {
+ if (dirbuf_len + fn_len >= MAXPATHLEN) {
+ rprintf(FERROR, "merge-file name overflows: %s\n", fn);
+ return NULL;
+ }
+ memcpy(buf, dirbuf + prefix_skip, dirbuf_len - prefix_skip);
+ memcpy(buf + dirbuf_len - prefix_skip, fn, fn_len + 1);
+ fn_len = clean_fname(buf, 1);
}
- memcpy(buf, dirbuf + prefix_skip, dirbuf_len - prefix_skip);
- memcpy(buf + dirbuf_len - prefix_skip, fn, fn_len + 1);
- fn_len = clean_fname(buf, 1);
- done:
if (len_ptr)
*len_ptr = fn_len;
return buf;