aboutsummaryrefslogtreecommitdiffstats
path: root/flist.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2011-10-22 10:20:08 -0700
committerWayne Davison <wayned@samba.org>2011-10-22 10:24:54 -0700
commit8dd6ea1f1ef743fdc28d00137d7bcb746642ebb6 (patch)
tree51404e0b8391196474cb5508d96d9bd0c137eeb3 /flist.c
parent7c8f180900432e646c0a4bd02e2c4033068dbb7c (diff)
downloadandroid_external_rsync-8dd6ea1f1ef743fdc28d00137d7bcb746642ebb6.tar.gz
android_external_rsync-8dd6ea1f1ef743fdc28d00137d7bcb746642ebb6.tar.bz2
android_external_rsync-8dd6ea1f1ef743fdc28d00137d7bcb746642ebb6.zip
Fix --delete-missing-args when --relative is active.
Diffstat (limited to 'flist.c')
-rw-r--r--flist.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/flist.c b/flist.c
index d3f4f640..6ec3c39c 100644
--- a/flist.c
+++ b/flist.c
@@ -102,6 +102,7 @@ int flist_eof = 0; /* all the file-lists are now known */
#define NORMAL_NAME 0
#define SLASH_ENDING_NAME 1
#define DOTDIR_NAME 2
+#define MISSING_NAME 3
/* Starting from protocol version 26, we always use 64-bit ino_t and dev_t
* internally, even if this platform does not allow files to have 64-bit inums.
@@ -1933,7 +1934,9 @@ static void send1extra(int f, struct file_struct *file, struct file_list *flist)
if (name_type != NORMAL_NAME) {
STRUCT_STAT st;
- if (link_stat(fbuf, &st, 1) != 0) {
+ if (name_type == MISSING_NAME)
+ memset(&st, 0, sizeof st);
+ else if (link_stat(fbuf, &st, 1) != 0) {
interpret_stat_error(fbuf, True);
continue;
}
@@ -2285,7 +2288,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
p = fn;
} else
fn = p;
- send_implied_dirs(f, flist, fbuf, fbuf, p, flags, name_type);
+ send_implied_dirs(f, flist, fbuf, fbuf, p, flags,
+ st.st_mode == 0 ? MISSING_NAME : name_type);
if (fn == p)
continue;
}