Fix --delete-missing-args when --relative is active.
authorWayne Davison <wayned@samba.org>
Sat, 22 Oct 2011 17:20:08 +0000 (10:20 -0700)
committerWayne Davison <wayned@samba.org>
Sat, 22 Oct 2011 17:24:54 +0000 (10:24 -0700)
flist.c

diff --git a/flist.c b/flist.c
index d3f4f6402881e6fab075b392fa402bcbee7d9eec..6ec3c39cffe1af0e6c381c218e86e3b042d85be6 100644 (file)
--- 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;
                        }