X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/40e383765a972e4cbfc4d0091f472542e04e453c..14dfad3873691b5ea9fe0170d9c7f6f5c9ea3179:/flist.c diff --git a/flist.c b/flist.c index aef150d8..60ce2ba6 100644 --- a/flist.c +++ b/flist.c @@ -1049,10 +1049,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, filesystem_dev = st.st_dev; else if (st.st_dev != filesystem_dev) { if (one_file_system > 1) { - if (verbose > 2) { + if (verbose > 1) { rprintf(FINFO, - "skipping mount-point dir %s\n", - thisname); + "[%s] skipping mount-point dir %s\n", + who_am_i(), thisname); } return NULL; } @@ -1235,7 +1235,7 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, { struct file_struct *file; #if defined SUPPORT_ACLS || defined SUPPORT_XATTRS - statx sx; + stat_x sx; #endif file = make_file(fname, flist, stp, flags, filter_level); @@ -1399,9 +1399,6 @@ static void add_dirs_to_tree(int parent_ndx, struct file_list *from_flist, dir_flist->files[dir_flist->used++] = file; dir_cnt--; - if (file->flags & FLAG_MOUNT_DIR) - continue; - if (dp) DIR_NEXT_SIBLING(dp) = dir_flist->used - 1; else if (parent_dp) @@ -1579,7 +1576,7 @@ static void send1extra(int f, struct file_struct *file, struct file_list *flist) change_local_filter_dir(fbuf, dlen, send_dir_depth); - if (file->flags & FLAG_XFER_DIR) + if (BITS_SETnUNSET(file->flags, FLAG_XFER_DIR, FLAG_MOUNT_DIR)) send_directory(f, flist, fbuf, dlen, flags); if (!relative_paths) @@ -1608,7 +1605,7 @@ static void send1extra(int f, struct file_struct *file, struct file_list *flist) if (is_dot_dir) { STRUCT_STAT st; - if (link_stat(fbuf, &st, copy_dirlinks) != 0) { + if (link_stat(fbuf, &st, 1) != 0) { io_error |= IOERR_GENERAL; rsyserr(FERROR, errno, "link_stat %s failed", full_fname(fbuf)); @@ -1905,7 +1902,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) if (fn != fbuf) memmove(fbuf, fn, len + 1); - if (link_stat(fbuf, &st, copy_dirlinks) != 0) { + if (link_stat(fbuf, &st, copy_dirlinks || is_dot_dir) != 0) { io_error |= IOERR_GENERAL; rsyserr(FERROR, errno, "link_stat %s failed", full_fname(fbuf)); @@ -2392,6 +2389,8 @@ static void clean_flist(struct file_list *flist, int strip_root) else { if (am_sender) file->flags |= FLAG_DUPLICATE; + else /* Make sure we don't lose vital flags. */ + fp->flags |= file->flags & (FLAG_TOP_DIR|FLAG_XFER_DIR); keep = j, drop = i; } } else @@ -2403,11 +2402,6 @@ static void clean_flist(struct file_list *flist, int strip_root) "removing duplicate name %s from file list (%d)\n", f_name(file, fbuf), drop + flist->ndx_start); } - /* Make sure we don't lose track of a user-specified - * top directory. */ - flist->sorted[keep]->flags |= flist->sorted[drop]->flags - & (FLAG_TOP_DIR|FLAG_XFER_DIR); - clear_file(flist->sorted[drop]); }