diff options
author | Wayne Davison <wayned@samba.org> | 2006-10-12 02:14:47 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2006-10-12 02:14:47 +0000 |
commit | 798cde474f15ecb653c13249f85da6cb6587893d (patch) | |
tree | 574129a1b1d866b576cbe61b191820caad744969 /exclude.c | |
parent | 558d482c477b4473eb004d69633799226fdf5a98 (diff) | |
download | android_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.c | 23 |
1 files changed, 11 insertions, 12 deletions
@@ -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; |