summaryrefslogtreecommitdiff
path: root/receiver.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2011-11-22 08:14:01 -0800
committerWayne Davison <wayned@samba.org>2011-11-23 12:29:25 -0800
commit48b51d0004922cb029c55fe921f5e7df1c0bff23 (patch)
tree3f5c04e0ea1f5dca95c3eafb3ab9119e51ec3e9d /receiver.c
parent7da17144fd764a2420a8d08897475c0b7fdbf956 (diff)
downloadrsync-48b51d0004922cb029c55fe921f5e7df1c0bff23.tar.gz
make repeated --fuzzy option look into alt-dest dirs.
Diffstat (limited to 'receiver.c')
-rw-r--r--receiver.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/receiver.c b/receiver.c
index 1819830a..3ab893d0 100644
--- a/receiver.c
+++ b/receiver.c
@@ -699,21 +699,26 @@ int recv_files(int f_in, int f_out, char *local_name)
break;
case FNAMECMP_FUZZY:
if (file->dirname) {
- pathjoin(fnamecmpbuf, MAXPATHLEN,
- file->dirname, xname);
+ pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, file->dirname, xname);
fnamecmp = fnamecmpbuf;
} else
fnamecmp = xname;
break;
default:
- if (fnamecmp_type >= basis_dir_cnt) {
+ if (fnamecmp_type > FNAMECMP_FUZZY && fnamecmp_type-FNAMECMP_FUZZY <= basis_dir_cnt) {
+ fnamecmp_type -= FNAMECMP_FUZZY + 1;
+ if (file->dirname) {
+ stringjoin(fnamecmpbuf, sizeof fnamecmpbuf,
+ basis_dir[fnamecmp_type], "/", file->dirname, "/", xname, NULL);
+ } else
+ pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, basis_dir[fnamecmp_type], xname);
+ } else if (fnamecmp_type >= basis_dir_cnt) {
rprintf(FERROR,
"invalid basis_dir index: %d.\n",
fnamecmp_type);
exit_cleanup(RERR_PROTOCOL);
- }
- pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
- basis_dir[fnamecmp_type], fname);
+ } else
+ pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, basis_dir[fnamecmp_type], fname);
fnamecmp = fnamecmpbuf;
break;
}