X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/f75a53e71b584bd1398271629bd021f107881082..57b12568e640b4e47039a30a6aa66e5d3a8efe12:/generator.c diff --git a/generator.c b/generator.c index c547529f..0aae2707 100644 --- a/generator.c +++ b/generator.c @@ -341,9 +341,6 @@ void itemize(struct file_struct *file, int ndx, int statret, STRUCT_STAT *st, if (protocol_version >= 29) { if (ndx >= 0) write_int(sock_f_out, ndx); - /* XXX Temorary compatibility hack */ - if (iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE)) - iflags |= ITEM_REPORT_XATTRS; /* ITEM_UPDATE */ write_shortint(sock_f_out, iflags); if (hlink) write_vstring(sock_f_out, hlink, strlen(hlink)); @@ -1149,24 +1146,28 @@ void generate_files(int f_out, struct file_list *flist, char *local_name, for (i = 0; i < flist->count; i++) { struct file_struct *file = flist->files[i]; - struct file_struct copy; if (!file->basename) continue; + recv_generator(local_name ? local_name : f_name_to(file, fbuf), + file, i, itemizing, maybe_PERMS_REPORT, code, + f_out, f_out_name); + /* We need to ensure that any dirs we create have writeable * permissions during the time we are putting files within * them. This is then fixed after the transfer is done. */ if (!am_root && S_ISDIR(file->mode) && !(file->mode & S_IWUSR)) { - copy = *file; - copy.mode |= S_IWUSR; /* user write */ - file = © + int mode = file->mode | S_IWUSR; /* user write */ + char *fname = local_name ? local_name : fbuf; + if (do_chmod(fname, mode & CHMOD_BITS) < 0) { + rsyserr(FERROR, errno, + "failed to modify permissions on %s", + full_fname(fname)); + } need_retouch_dir_perms = 1; } - recv_generator(local_name ? local_name : f_name_to(file, fbuf), - file, i, itemizing, maybe_PERMS_REPORT, code, - f_out, f_out_name); if (preserve_hard_links) check_for_finished_hlinks(itemizing, code);