From: Wayne Davison Date: Tue, 5 Dec 2006 18:32:37 +0000 (+0000) Subject: Fixed failing hunks. X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/commitdiff_plain/1aa236e1cbe732c26c290f4fc0f269e21547149b?ds=sidebyside Fixed failing hunks. --- diff --git a/ODBC-dblog.diff b/ODBC-dblog.diff index 7180103..4b70c94 100644 --- a/ODBC-dblog.diff +++ b/ODBC-dblog.diff @@ -69,7 +69,7 @@ See the newly-created file "instructions" for more info. am_sender ? "on" : "to", --- old/configure.in +++ new/configure.in -@@ -610,6 +610,12 @@ if test x"$with_included_popt" != x"yes" +@@ -632,6 +632,12 @@ if test x"$with_included_popt" != x"yes" AC_CHECK_LIB(popt, poptGetContext, , [with_included_popt=yes]) fi @@ -661,7 +661,7 @@ See the newly-created file "instructions" for more info. + if (*strFileNamePtr == '/') + strFileNamePtr++; + -+ snprintf(strFileSize, sizeof strFileSize, "%.0f", (double)file->length); ++ snprintf(strFileSize, sizeof strFileSize, "%.0f", (double)F_LENGTH(file)); + if (am_sender) { + intBytesTransferred = stats.total_written - initial_stats->total_written; + } else { @@ -1051,7 +1051,7 @@ See the newly-created file "instructions" for more info. FN_LOCAL_BOOL(lp_list, list) --- old/log.c +++ new/log.c -@@ -93,7 +93,7 @@ struct { +@@ -95,7 +95,7 @@ struct { /* * Map from rsync error code to name, or return NULL. */ @@ -1062,7 +1062,7 @@ See the newly-created file "instructions" for more info. for (i = 0; rerr_names[i].name; i++) { --- old/receiver.c +++ new/receiver.c -@@ -110,6 +110,10 @@ static int get_tmpname(char *fnametmp, c +@@ -110,6 +110,10 @@ int get_tmpname(char *fnametmp, char *fn if (maxname < 1) { rprintf(FERROR, "temporary filename too long: %s\n", fname); @@ -1118,8 +1118,8 @@ See the newly-created file "instructions" for more info. +#endif } else { if (remove_source_files - || (preserve_hard_links -@@ -422,6 +444,9 @@ int recv_files(int f_in, struct file_lis + || (preserve_hard_links && F_IS_HLINKED(file))) +@@ -419,6 +441,9 @@ int recv_files(int f_in, struct file_lis if (server_filter_list.head && check_filter(&server_filter_list, fname, 0) < 0) { rprintf(FERROR, "attempt to hack rsync failed.\n"); @@ -1129,7 +1129,7 @@ See the newly-created file "instructions" for more info. exit_cleanup(RERR_PROTOCOL); } -@@ -478,6 +503,11 @@ int recv_files(int f_in, struct file_lis +@@ -475,6 +500,11 @@ int recv_files(int f_in, struct file_lis rprintf(FERROR, "invalid basis_dir index: %d.\n", fnamecmp_type); @@ -1141,37 +1141,37 @@ See the newly-created file "instructions" for more info. exit_cleanup(RERR_PROTOCOL); } pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, -@@ -526,6 +556,9 @@ int recv_files(int f_in, struct file_lis +@@ -523,6 +553,9 @@ int recv_files(int f_in, struct file_lis } else if (do_fstat(fd1,&st) != 0) { rsyserr(FERROR, errno, "fstat %s failed", full_fname(fnamecmp)); +#ifdef HAVE_LIBODBC + db_log_error(FERROR, 19,"fstat %s failed",full_fname(fnamecmp)); +#endif - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); close(fd1); continue; -@@ -539,6 +572,9 @@ int recv_files(int f_in, struct file_lis +@@ -536,6 +569,9 @@ int recv_files(int f_in, struct file_lis */ rprintf(FERROR,"recv_files: %s is a directory\n", full_fname(fnamecmp)); +#ifdef HAVE_LIBODBC + db_log_error(FERROR,20,"recv_files: %s is a directory",full_fname(fnamecmp)); +#endif - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); close(fd1); continue; -@@ -562,6 +598,9 @@ int recv_files(int f_in, struct file_lis +@@ -559,6 +595,9 @@ int recv_files(int f_in, struct file_lis if (fd2 == -1) { rsyserr(FERROR, errno, "open %s failed", full_fname(fname)); +#ifdef HAVE_LIBODBC + db_log_error(FERROR,22, "open %s failed", full_fname(fname)); +#endif - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); if (fd1 != -1) close(fd1); -@@ -595,6 +634,10 @@ int recv_files(int f_in, struct file_lis +@@ -592,6 +631,10 @@ int recv_files(int f_in, struct file_lis if (fd2 == -1) { rsyserr(FERROR, errno, "mkstemp %s failed", full_fname(fnametmp)); @@ -1179,11 +1179,11 @@ See the newly-created file "instructions" for more info. + db_log_error(FERROR, 22, "mkstemp %s failed", + full_fname(fnametmp)); +#endif - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); if (fd1 != -1) close(fd1); -@@ -615,12 +658,19 @@ int recv_files(int f_in, struct file_lis - fname, fd2, file->length); +@@ -612,12 +655,19 @@ int recv_files(int f_in, struct file_lis + fname, fd2, F_LENGTH(file)); log_item(log_code, file, &initial_stats, iflags, NULL); +#ifdef HAVE_LIBODBC @@ -1202,7 +1202,7 @@ See the newly-created file "instructions" for more info. exit_cleanup(RERR_FILEIO); } -@@ -679,6 +729,12 @@ int recv_files(int f_in, struct file_lis +@@ -674,6 +724,12 @@ int recv_files(int f_in, struct file_lis rprintf(msgtype, "%s: %s failed verification -- update %s%s.\n", errstr, fname, keptstr, redostr); @@ -1213,11 +1213,11 @@ See the newly-created file "instructions" for more info. + keptstr, redostr); +#endif } - if (!phase) { - SIVAL(numbuf, 0, i); + if (!phase) + send_msg_int(MSG_REDO, i); --- old/sender.c +++ new/sender.c -@@ -355,6 +355,9 @@ void send_files(struct file_list *flist, +@@ -305,6 +305,9 @@ void send_files(struct file_list *flist, end_progress(st.st_size); log_item(log_code, file, &initial_stats, iflags, NULL); diff --git a/acls.diff b/acls.diff index 7e832a2..6d40ba3 100644 --- a/acls.diff +++ b/acls.diff @@ -1138,7 +1138,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern int preserve_devices; extern int preserve_specials; extern int preserve_links; -@@ -95,7 +96,8 @@ path +@@ -93,7 +94,8 @@ path ****************************************************************************/ static int make_bak_dir(char *fullpath) { @@ -1148,7 +1148,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. char *rel = fullpath + backup_dir_len; char *end = rel + strlen(rel); char *p = end; -@@ -127,15 +129,24 @@ static int make_bak_dir(char *fullpath) +@@ -125,15 +127,24 @@ static int make_bak_dir(char *fullpath) if (p >= rel) { /* Try to transfer the directory settings of the * actual dir that the files are coming from. */ @@ -1177,7 +1177,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } } *p = '/'; -@@ -173,15 +184,18 @@ static int robust_move(const char *src, +@@ -171,15 +182,18 @@ static int robust_move(const char *src, * We will move the file to be deleted into a parallel directory tree. */ static int keep_backup(const char *fname) { @@ -1198,7 +1198,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (!(file = make_file(fname, NULL, NULL, 0, NO_FILTERS))) return 1; /* the file could have disappeared */ -@@ -191,6 +205,13 @@ static int keep_backup(const char *fname +@@ -189,6 +203,13 @@ static int keep_backup(const char *fname return 0; } @@ -1212,7 +1212,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. /* Check to see if this is a device file, or link */ if ((am_root && preserve_devices && IS_DEVICE(file->mode)) || (preserve_specials && IS_SPECIAL(file->mode))) { -@@ -261,7 +282,7 @@ static int keep_backup(const char *fname +@@ -259,7 +280,7 @@ static int keep_backup(const char *fname if (robust_move(fname, buf) != 0) { rsyserr(FERROR, errno, "keep_backup failed: %s -> \"%s\"", full_fname(fname), buf); @@ -1324,9 +1324,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern int preserve_links; extern int preserve_hard_links; extern int preserve_devices; -@@ -143,6 +144,8 @@ static void list_file_entry(struct file_ - +@@ -144,6 +145,8 @@ static void list_file_entry(struct file_ permstring(permbuf, f->mode); + len = F_LENGTH(f); + /* TODO: indicate '+' if the entry has an ACL. */ + @@ -1343,10 +1343,10 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + extra_len += (S_ISDIR(mode) ? 2 : 1) * sizeof (union flist_extras); +#endif + - sum_len = always_checksum && S_ISREG(mode) ? MD4_SUM_LENGTH : 0; + if (always_checksum && S_ISREG(mode)) + extra_len += SUM_EXTRA_CNT * EXTRA_LEN; - alloc_len = file_struct_len + dirname_len + basename_len -@@ -725,6 +734,11 @@ static struct file_struct *recv_file_ent +@@ -732,6 +741,11 @@ static struct file_struct *recv_file_ent read_buf(f, bp, checksum_len); } @@ -1358,16 +1358,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return file; } -@@ -969,6 +983,8 @@ void unmake_file(struct file_struct *fil - { - union flist_extras *start = (union flist_extras *)file - - (flist_extra_ndx - 1); -+ if (preserve_acls && S_ISDIR(file->mode)) -+ start--; - free(start); - } - -@@ -977,6 +993,9 @@ static struct file_struct *send_file_nam +@@ -992,6 +1006,9 @@ static struct file_struct *send_file_nam unsigned short flags) { struct file_struct *file; @@ -1377,7 +1368,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. file = make_file(fname, flist, stp, flags, f == -2 ? SERVER_FILTERS : ALL_FILTERS); -@@ -986,11 +1005,24 @@ static struct file_struct *send_file_nam +@@ -1001,11 +1018,24 @@ static struct file_struct *send_file_nam if (chmod_modes && !S_ISLNK(file->mode)) file->mode = tweak_mode(file->mode, chmod_modes); @@ -1412,15 +1403,15 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern int preserve_links; extern int preserve_devices; extern int preserve_specials; -@@ -89,6 +90,7 @@ extern int one_file_system; - extern int file_struct_len; +@@ -87,6 +88,7 @@ extern int force_delete; + extern int one_file_system; extern struct stats stats; extern dev_t filesystem_dev; +extern mode_t orig_umask; extern char *backup_dir; extern char *backup_suffix; extern int backup_suffix_len; -@@ -447,22 +449,27 @@ static void do_delete_pass(struct file_l +@@ -445,22 +447,27 @@ static void do_delete_pass(struct file_l rprintf(FINFO, " \r"); } @@ -1453,12 +1444,12 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int32 iflags, uchar fnamecmp_type, const char *xname) { if (statret >= 0) { /* A from-dest-dir statret can == 1! */ -@@ -470,20 +477,24 @@ void itemize(struct file_struct *file, i +@@ -468,20 +475,24 @@ void itemize(struct file_struct *file, i : S_ISDIR(file->mode) ? !omit_dir_times : !S_ISLNK(file->mode); -- if (S_ISREG(file->mode) && file->length != st->st_size) -+ if (S_ISREG(file->mode) && file->length != sxp->st.st_size) +- if (S_ISREG(file->mode) && F_LENGTH(file) != st->st_size) ++ if (S_ISREG(file->mode) && F_LENGTH(file) != sxp->st.st_size) iflags |= ITEM_REPORT_SIZE; if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time && !(iflags & ITEM_MATCHED) @@ -1483,7 +1474,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } else iflags |= ITEM_IS_NEW; -@@ -735,7 +746,7 @@ void check_for_finished_hlinks(int itemi +@@ -733,7 +744,7 @@ void check_for_finished_hlinks(int itemi * handling the file, -1 if no dest-linking occurred, or a non-negative * value if we found an alternate basis file. */ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, @@ -1492,7 +1483,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int maybe_ATTRS_REPORT, enum logcode code) { int best_match = -1; -@@ -744,7 +755,7 @@ static int try_dests_reg(struct file_str +@@ -742,7 +753,7 @@ static int try_dests_reg(struct file_str do { pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname); @@ -1501,7 +1492,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. continue; switch (match_level) { case 0: -@@ -752,16 +763,20 @@ static int try_dests_reg(struct file_str +@@ -750,16 +761,20 @@ static int try_dests_reg(struct file_str match_level = 1; /* FALL THROUGH */ case 1: @@ -1525,7 +1516,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. continue; best_match = j; match_level = 3; -@@ -776,7 +791,7 @@ static int try_dests_reg(struct file_str +@@ -774,7 +789,7 @@ static int try_dests_reg(struct file_str if (j != best_match) { j = best_match; pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname); @@ -1534,7 +1525,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return -1; } -@@ -784,15 +799,20 @@ static int try_dests_reg(struct file_str +@@ -782,15 +797,20 @@ static int try_dests_reg(struct file_str #ifdef SUPPORT_HARD_LINKS if (link_dest) { int i = itemizing && (verbose > 1 || stdout_format_has_i > 1); @@ -1542,7 +1533,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + if (hard_link_one(file, ndx, fname, 0, sxp, cmpbuf, 1, i, code) < 0) goto try_a_copy; - if (preserve_hard_links && IS_HLINKED(file)) + if (preserve_hard_links && F_IS_HLINKED(file)) hard_link_cluster(file, ndx, itemizing, code, j); } else #endif @@ -1558,7 +1549,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (verbose > 1 && maybe_ATTRS_REPORT) { rprintf(FCLIENT, "%s is uptodate\n", fname); } -@@ -808,8 +828,13 @@ static int try_dests_reg(struct file_str +@@ -806,8 +826,13 @@ static int try_dests_reg(struct file_str } return -1; } @@ -1574,7 +1565,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. set_file_attrs(fname, file, NULL, 0); if (maybe_ATTRS_REPORT && ((!itemizing && verbose && match_level == 2) -@@ -830,7 +855,7 @@ static int try_dests_reg(struct file_str +@@ -828,7 +853,7 @@ static int try_dests_reg(struct file_str * handling the file, or -1 if no dest-linking occurred, or a non-negative * value if we found an alternate basis file. */ static int try_dests_non(struct file_struct *file, char *fname, int ndx, @@ -1583,7 +1574,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int maybe_ATTRS_REPORT, enum logcode code) { char lnk[MAXPATHLEN]; -@@ -862,24 +887,24 @@ static int try_dests_non(struct file_str +@@ -860,24 +885,24 @@ static int try_dests_non(struct file_str do { pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname); @@ -1613,7 +1604,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. continue; break; #endif -@@ -893,7 +918,7 @@ static int try_dests_non(struct file_str +@@ -891,7 +916,7 @@ static int try_dests_non(struct file_str break; case TYPE_SPECIAL: case TYPE_DEVICE: @@ -1622,7 +1613,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. continue; break; #ifdef SUPPORT_LINKS -@@ -910,7 +935,11 @@ static int try_dests_non(struct file_str +@@ -908,7 +933,11 @@ static int try_dests_non(struct file_str match_level = 2; best_match = j; } @@ -1635,7 +1626,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. match_level = 3; best_match = j; break; -@@ -923,7 +952,7 @@ static int try_dests_non(struct file_str +@@ -921,7 +950,7 @@ static int try_dests_non(struct file_str if (j != best_match) { j = best_match; pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname); @@ -1644,7 +1635,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return -1; } -@@ -954,7 +983,15 @@ static int try_dests_non(struct file_str +@@ -952,7 +981,15 @@ static int try_dests_non(struct file_str : ITEM_LOCAL_CHANGE + (match_level == 3 ? ITEM_XNAME_FOLLOWS : 0); char *lp = match_level == 3 ? "" : NULL; @@ -1661,7 +1652,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (verbose > 1 && maybe_ATTRS_REPORT) { rprintf(FCLIENT, "%s%s is uptodate\n", -@@ -967,6 +1004,7 @@ static int try_dests_non(struct file_str +@@ -965,6 +1002,7 @@ static int try_dests_non(struct file_str } static int phase = 0; @@ -1669,7 +1660,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. /* Acts on the_file_list->file's ndx'th item, whose name is fname. If a dir, * make sure it exists, and has the right permissions/timestamp info. For -@@ -988,7 +1026,8 @@ static void recv_generator(char *fname, +@@ -986,7 +1024,8 @@ static void recv_generator(char *fname, static int need_fuzzy_dirlist = 0; struct file_struct *fuzzy_file = NULL; int fd = -1, f_copy = -1; @@ -1679,7 +1670,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. struct file_struct *back_file = NULL; int statret, real_ret, stat_errno; char *fnamecmp, *partialptr, *backupptr = NULL; -@@ -1044,6 +1083,9 @@ static void recv_generator(char *fname, +@@ -1042,6 +1081,9 @@ static void recv_generator(char *fname, } else if (!dry_run) return; } @@ -1689,7 +1680,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (dry_run > 1) { statret = -1; stat_errno = ENOENT; -@@ -1051,7 +1093,7 @@ static void recv_generator(char *fname, +@@ -1049,7 +1091,7 @@ static void recv_generator(char *fname, const char *dn = file->dirname ? file->dirname : "."; if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) { if (relative_paths && !implied_dirs @@ -1698,7 +1689,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. && create_directory_path(fname) < 0) { rsyserr(FERROR, errno, "recv_generator: mkdir %s failed", -@@ -1063,6 +1105,10 @@ static void recv_generator(char *fname, +@@ -1061,6 +1103,10 @@ static void recv_generator(char *fname, } if (fuzzy_basis) need_fuzzy_dirlist = 1; @@ -1709,7 +1700,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } parent_dirname = dn; -@@ -1072,7 +1118,7 @@ static void recv_generator(char *fname, +@@ -1070,7 +1116,7 @@ static void recv_generator(char *fname, need_fuzzy_dirlist = 0; } @@ -1718,7 +1709,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. keep_dirlinks && S_ISDIR(file->mode)); stat_errno = errno; } -@@ -1090,8 +1136,9 @@ static void recv_generator(char *fname, +@@ -1088,8 +1134,9 @@ static void recv_generator(char *fname, * mode based on the local permissions and some heuristics. */ if (!preserve_perms) { int exists = statret == 0 @@ -1730,7 +1721,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (S_ISDIR(file->mode)) { -@@ -1100,8 +1147,8 @@ static void recv_generator(char *fname, +@@ -1098,8 +1145,8 @@ static void recv_generator(char *fname, * file of that name and it is *not* a directory, then * we need to delete it. If it doesn't exist, then * (perhaps recursively) create it. */ @@ -1741,7 +1732,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return; statret = -1; } -@@ -1110,14 +1157,14 @@ static void recv_generator(char *fname, +@@ -1108,14 +1155,14 @@ static void recv_generator(char *fname, dry_run++; } real_ret = statret; @@ -1758,7 +1749,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. itemizing, maybe_ATTRS_REPORT, code); if (j == -2) { itemizing = 0; -@@ -1126,7 +1173,11 @@ static void recv_generator(char *fname, +@@ -1124,7 +1171,11 @@ static void recv_generator(char *fname, statret = 1; } if (itemizing && f_out != -1) { @@ -1771,7 +1762,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL); } if (real_ret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) { -@@ -1146,21 +1197,21 @@ static void recv_generator(char *fname, +@@ -1144,21 +1195,21 @@ static void recv_generator(char *fname, return; } } @@ -1790,7 +1781,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + goto cleanup; } - if (preserve_hard_links && IS_HLINKED(file) + if (preserve_hard_links && F_IS_HLINKED(file) - && hard_link_check(file, ndx, fname, statret, &st, + && hard_link_check(file, ndx, fname, statret, &sx, itemizing, code, HL_CHECK_MASTER)) @@ -1799,7 +1790,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (preserve_links && S_ISLNK(file->mode)) { #ifdef SUPPORT_LINKS -@@ -1179,14 +1230,14 @@ static void recv_generator(char *fname, +@@ -1177,14 +1228,14 @@ static void recv_generator(char *fname, char lnk[MAXPATHLEN]; int len; @@ -1814,10 +1805,10 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. - set_file_attrs(fname, file, &st, maybe_ATTRS_REPORT); + itemize(file, ndx, 0, &sx, 0, 0, NULL); + set_file_attrs(fname, file, &sx, maybe_ATTRS_REPORT); - if (preserve_hard_links && IS_HLINKED(file)) + if (preserve_hard_links && F_IS_HLINKED(file)) hard_link_cluster(file, ndx, itemizing, code, -1); if (remove_source_files == 1) -@@ -1195,10 +1246,10 @@ static void recv_generator(char *fname, +@@ -1193,10 +1244,10 @@ static void recv_generator(char *fname, } /* Not the right symlink (or not a symlink), so * delete it. */ @@ -1830,16 +1821,16 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. itemizing, maybe_ATTRS_REPORT, code); if (j == -2) { #ifndef CAN_HARDLINK_SYMLINK -@@ -1214,7 +1265,7 @@ static void recv_generator(char *fname, +@@ -1212,7 +1263,7 @@ static void recv_generator(char *fname, statret = 1; } - if (preserve_hard_links && IS_HLINKED(file) + if (preserve_hard_links && F_IS_HLINKED(file) - && hard_link_check(file, ndx, fname, -1, &st, + && hard_link_check(file, ndx, fname, -1, &sx, itemizing, code, HL_SKIP)) return; if (do_symlink(sl, fname) != 0) { -@@ -1223,7 +1274,7 @@ static void recv_generator(char *fname, +@@ -1221,7 +1272,7 @@ static void recv_generator(char *fname, } else { set_file_attrs(fname, file, NULL, 0); if (itemizing) { @@ -1848,7 +1839,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. ITEM_LOCAL_CHANGE, 0, NULL); } if (code != FNONE && verbose) -@@ -1246,31 +1297,36 @@ static void recv_generator(char *fname, +@@ -1244,31 +1295,36 @@ static void recv_generator(char *fname, if (statret == 0) { char *t; if (IS_DEVICE(file->mode)) { @@ -1879,7 +1870,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + itemize(file, ndx, 0, &sx, 0, 0, NULL); + } + set_file_attrs(fname, file, &sx, maybe_ATTRS_REPORT); - if (preserve_hard_links && IS_HLINKED(file)) + if (preserve_hard_links && F_IS_HLINKED(file)) hard_link_cluster(file, ndx, itemizing, code, -1); if (remove_source_files == 1) goto return_with_success; @@ -1895,16 +1886,16 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. itemizing, maybe_ATTRS_REPORT, code); if (j == -2) { #ifndef CAN_HARDLINK_SPECIAL -@@ -1286,7 +1342,7 @@ static void recv_generator(char *fname, +@@ -1284,7 +1340,7 @@ static void recv_generator(char *fname, statret = 1; } - if (preserve_hard_links && IS_HLINKED(file) + if (preserve_hard_links && F_IS_HLINKED(file) - && hard_link_check(file, ndx, fname, -1, &st, + && hard_link_check(file, ndx, fname, -1, &sx, itemizing, code, HL_SKIP)) return; if (verbose > 2) { -@@ -1299,7 +1355,11 @@ static void recv_generator(char *fname, +@@ -1297,7 +1353,11 @@ static void recv_generator(char *fname, } else { set_file_attrs(fname, file, NULL, 0); if (itemizing) { @@ -1917,7 +1908,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. ITEM_LOCAL_CHANGE, 0, NULL); } if (code != FNONE && verbose) -@@ -1309,7 +1369,7 @@ static void recv_generator(char *fname, +@@ -1307,7 +1367,7 @@ static void recv_generator(char *fname, if (remove_source_files == 1) goto return_with_success; } @@ -1926,7 +1917,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (!S_ISREG(file->mode)) { -@@ -1343,7 +1403,7 @@ static void recv_generator(char *fname, +@@ -1341,7 +1401,7 @@ static void recv_generator(char *fname, } if (update_only && statret == 0 @@ -1935,7 +1926,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (verbose > 1) rprintf(FINFO, "%s is newer\n", fname); return; -@@ -1352,20 +1412,20 @@ static void recv_generator(char *fname, +@@ -1350,20 +1410,20 @@ static void recv_generator(char *fname, fnamecmp = fname; fnamecmp_type = FNAMECMP_FNAME; @@ -1960,7 +1951,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (j >= 0) { fnamecmp = fnamecmpbuf; -@@ -1375,7 +1435,7 @@ static void recv_generator(char *fname, +@@ -1373,7 +1433,7 @@ static void recv_generator(char *fname, } real_ret = statret; @@ -1969,30 +1960,30 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (partial_dir && (partialptr = partial_dir_fname(fname)) != NULL && link_stat(partialptr, &partial_st, 0) == 0 -@@ -1394,7 +1454,7 @@ static void recv_generator(char *fname, +@@ -1392,7 +1452,7 @@ static void recv_generator(char *fname, rprintf(FINFO, "fuzzy basis selected for %s: %s\n", fname, fnamecmpbuf); } -- st.st_size = fuzzy_file->length; -+ sx.st.st_size = fuzzy_file->length; +- st.st_size = F_LENGTH(fuzzy_file); ++ sx.st.st_size = F_LENGTH(fuzzy_file); statret = 0; fnamecmp = fnamecmpbuf; fnamecmp_type = FNAMECMP_FUZZY; -@@ -1403,7 +1463,7 @@ static void recv_generator(char *fname, +@@ -1401,7 +1461,7 @@ static void recv_generator(char *fname, if (statret != 0) { - if (preserve_hard_links && IS_HLINKED(file) + if (preserve_hard_links && F_IS_HLINKED(file) - && hard_link_check(file, ndx, fname, statret, &st, + && hard_link_check(file, ndx, fname, statret, &sx, itemizing, code, HL_SKIP)) return; if (stat_errno == ENOENT) -@@ -1413,36 +1473,49 @@ static void recv_generator(char *fname, +@@ -1411,36 +1471,49 @@ static void recv_generator(char *fname, return; } -- if (append_mode && st.st_size > file->length) -+ if (append_mode && sx.st.st_size > file->length) +- if (append_mode && st.st_size > F_LENGTH(file)) ++ if (append_mode && sx.st.st_size > F_LENGTH(file)) return; if (fnamecmp_type <= FNAMECMP_BASIS_DIR_HIGH) @@ -2025,7 +2016,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } - set_file_attrs(fname, file, &st, maybe_ATTRS_REPORT); + set_file_attrs(fname, file, &sx, maybe_ATTRS_REPORT); - if (preserve_hard_links && IS_HLINKED(file)) + if (preserve_hard_links && F_IS_HLINKED(file)) hard_link_cluster(file, ndx, itemizing, code, -1); if (remove_source_files != 1) - return; @@ -2044,10 +2035,10 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. fnamecmp = partialptr; fnamecmp_type = FNAMECMP_PARTIAL_DIR; statret = 0; -@@ -1466,17 +1539,21 @@ static void recv_generator(char *fname, +@@ -1464,17 +1537,21 @@ static void recv_generator(char *fname, pretend_missing: /* pretend the file didn't exist */ - if (preserve_hard_links && IS_HLINKED(file) + if (preserve_hard_links && F_IS_HLINKED(file) - && hard_link_check(file, ndx, fname, statret, &st, + && hard_link_check(file, ndx, fname, statret, &sx, itemizing, code, HL_SKIP)) @@ -2069,7 +2060,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (!(back_file = make_file(fname, NULL, NULL, 0, NO_FILTERS))) { close(fd); -@@ -1487,7 +1564,7 @@ static void recv_generator(char *fname, +@@ -1485,7 +1562,7 @@ static void recv_generator(char *fname, full_fname(backupptr)); unmake_file(back_file); close(fd); @@ -2078,7 +2069,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0) { -@@ -1495,14 +1572,14 @@ static void recv_generator(char *fname, +@@ -1493,14 +1570,14 @@ static void recv_generator(char *fname, full_fname(backupptr)); unmake_file(back_file); close(fd); @@ -2095,7 +2086,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (verbose > 2) -@@ -1520,24 +1597,32 @@ static void recv_generator(char *fname, +@@ -1518,24 +1595,32 @@ static void recv_generator(char *fname, iflags |= ITEM_BASIS_TYPE_FOLLOWS; if (fnamecmp_type == FNAMECMP_FUZZY) iflags |= ITEM_XNAME_FOLLOWS; @@ -2105,7 +2096,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. + get_acl(fnamecmp, &real_sx); +#endif + itemize(file, -1, real_ret, &real_sx, iflags, fnamecmp_type, - fuzzy_file ? fuzzy_file->basename : NULL); + fuzzy_file ? F_BASENAME(fuzzy_file) : NULL); +#ifdef SUPPORT_ACLS + if (preserve_acls) + free_acl(&real_sx); @@ -2113,7 +2104,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } if (!do_xfers) { - if (preserve_hard_links && IS_HLINKED(file)) + if (preserve_hard_links && F_IS_HLINKED(file)) hard_link_cluster(file, ndx, itemizing, code, -1); - return; + goto cleanup; @@ -2133,7 +2124,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (f_copy >= 0) { close(f_copy); -@@ -1550,6 +1635,13 @@ static void recv_generator(char *fname, +@@ -1548,6 +1633,13 @@ static void recv_generator(char *fname, } close(fd); @@ -2147,7 +2138,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. } void generate_files(int f_out, struct file_list *flist, char *local_name) -@@ -1611,6 +1703,8 @@ void generate_files(int f_out, struct fi +@@ -1609,6 +1701,8 @@ void generate_files(int f_out, struct fi * notice that and let us know via the redo pipe (or its closing). */ ignore_timeout = 1; @@ -2164,9 +2155,9 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern int link_dest; +extern int preserve_acls; extern int make_backups; - extern int flist_extra_ndx; extern int remove_source_files; -@@ -155,15 +156,19 @@ void init_hard_links(void) + extern int stdout_format_has_i; +@@ -154,15 +155,19 @@ void init_hard_links(void) #ifdef SUPPORT_HARD_LINKS static int maybe_hard_link(struct file_struct *file, int ndx, @@ -2190,7 +2181,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. ITEM_LOCAL_CHANGE | ITEM_XNAME_FOLLOWS, 0, ""); } -@@ -178,13 +183,13 @@ static int maybe_hard_link(struct file_s +@@ -177,13 +182,13 @@ static int maybe_hard_link(struct file_s return -1; } } @@ -2206,7 +2197,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. enum logcode code, int skip) { #ifdef SUPPORT_HARD_LINKS -@@ -228,7 +233,7 @@ int hard_link_check(struct file_struct * +@@ -227,7 +232,7 @@ int hard_link_check(struct file_struct * || st2.st_ino != st3.st_ino) continue; statret = 1; @@ -2215,7 +2206,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (verbose < 2 || !stdout_format_has_i) { itemizing = 0; code = FNONE; -@@ -238,12 +243,16 @@ int hard_link_check(struct file_struct * +@@ -237,12 +242,16 @@ int hard_link_check(struct file_struct * if (!unchanged_file(cmpbuf, file, &st3)) continue; statret = 1; @@ -2235,7 +2226,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. toname, &st2, itemizing, code); if (remove_source_files == 1 && do_xfers) send_msg_int(MSG_SUCCESS, ndx); -@@ -258,7 +267,7 @@ int hard_link_check(struct file_struct * +@@ -257,7 +266,7 @@ int hard_link_check(struct file_struct * #ifdef SUPPORT_HARD_LINKS int hard_link_one(struct file_struct *file, int ndx, char *fname, @@ -2244,7 +2235,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int itemizing, enum logcode code) { if (do_link(toname, fname)) { -@@ -274,7 +283,11 @@ int hard_link_one(struct file_struct *fi +@@ -273,7 +282,11 @@ int hard_link_one(struct file_struct *fi } if (itemizing) { @@ -2257,7 +2248,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. ITEM_LOCAL_CHANGE | ITEM_XNAME_FOLLOWS, 0, terse ? "" : toname); } -@@ -291,14 +304,15 @@ void hard_link_cluster(struct file_struc +@@ -290,14 +303,15 @@ void hard_link_cluster(struct file_struc #ifdef SUPPORT_HARD_LINKS char hlink1[MAXPATHLEN]; char *hlink2; @@ -2275,7 +2266,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. return; if (!(file->flags & FLAG_HLINK_FIRST)) { while (!(file->flags & FLAG_HLINK_LAST)) { -@@ -314,9 +328,13 @@ void hard_link_cluster(struct file_struc +@@ -313,9 +327,13 @@ void hard_link_cluster(struct file_struc if (hl->hlindex != SKIPPED_LINK) continue; hlink2 = f_name(file, NULL); @@ -5591,7 +5582,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. +#endif /* SUPPORT_ACLS */ --- old/log.c +++ new/log.c -@@ -618,8 +618,10 @@ static void log_formatted(enum logcode c +@@ -625,8 +625,10 @@ static void log_formatted(enum logcode c c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p'; c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o'; c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g'; @@ -5699,11 +5690,11 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. /* A large opt value means that set_refuse_options() * turned this option off. */ @@ -1223,6 +1253,8 @@ int parse_arguments(int *argc, const cha - preserve_uid = flist_extra_ndx++; + preserve_uid = ++flist_extra_cnt; if (preserve_gid) - preserve_gid = flist_extra_ndx++; + preserve_gid = ++flist_extra_cnt; + if (preserve_acls) -+ preserve_acls = flist_extra_ndx++; ++ preserve_acls = ++flist_extra_cnt; *argv = poptGetArgs(pc); *argc = count_args(*argv); @@ -5720,7 +5711,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. if (preserve_gid) --- old/receiver.c +++ new/receiver.c -@@ -48,6 +48,7 @@ extern int keep_partial; +@@ -47,6 +47,7 @@ extern int keep_partial; extern int checksum_seed; extern int inplace; extern int delay_updates; @@ -5728,7 +5719,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. extern struct stats stats; extern char *stdout_format; extern char *tmpdir; -@@ -348,6 +349,10 @@ int recv_files(int f_in, struct file_lis +@@ -347,6 +348,10 @@ int recv_files(int f_in, struct file_lis int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i; enum logcode log_code = log_before_transfer ? FLOG : FINFO; int max_phase = protocol_version >= 29 ? 2 : 1; @@ -5739,7 +5730,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. int i, recv_ok; if (verbose > 2) -@@ -551,7 +556,16 @@ int recv_files(int f_in, struct file_lis +@@ -550,7 +555,16 @@ int recv_files(int f_in, struct file_lis * mode based on the local permissions and some heuristics. */ if (!preserve_perms) { int exists = fd1 != -1; @@ -5948,7 +5939,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. --- old/rsync.h +++ new/rsync.h -@@ -495,6 +495,14 @@ struct idev { +@@ -496,6 +496,14 @@ struct idev { #define IN_LOOPBACKNET 127 #endif @@ -5963,20 +5954,20 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. #define GID_NONE ((gid_t)-1) #define HL_CHECK_MASTER 0 -@@ -540,10 +548,12 @@ union flist_extras { - /* When enabled, all entries have these: */ - #define F_UID(f) FLIST_EXTRA(f, preserve_uid).uid - #define F_GID(f) FLIST_EXTRA(f, preserve_gid).gid -+#define F_ACL(f) FLIST_EXTRA(f, preserve_acls).num +@@ -551,10 +559,12 @@ extern int preserve_gid; + /* When the associated option is on, all entries will have these present: */ + #define F_UID(f) REQ_EXTRA(f, preserve_uid)->uid + #define F_GID(f) REQ_EXTRA(f, preserve_gid)->gid ++#define F_ACL(f) REQ_EXTRA(f, preserve_acls)->unum /* These are per-entry optional and mutally exclusive: */ - #define F_IDEV(f) FLIST_EXTRA(f, flist_extra_ndx).idev - #define F_HLIST(f) FLIST_EXTRA(f, flist_extra_ndx).hlist -+#define F_DEFACL(f) FLIST_EXTRA(f, flist_extra_ndx).num + #define F_IDEV(f) OPT_EXTRA(f, LEN64_BUMP(f))->idev + #define F_HLIST(f) OPT_EXTRA(f, LEN64_BUMP(f))->hlist ++#define F_DEFACL(f) OPT_EXTRA(f, LEN64_BUMP(f))->unum - /* These are per-entry optional, but always both or neither: */ - #define F_DMAJOR(f) FLIST_EXTRA(f, flist_extra_ndx + (IS_HLINKED(f)? 1 : 0)).num -@@ -667,6 +677,17 @@ struct stats { + /* These are per-entry optional, but always both or neither: + * (Note: a device doesn't need to use LEN64_BUMP(f).) */ +@@ -689,6 +699,17 @@ struct stats { struct chmod_mode_struct; @@ -5994,7 +5985,7 @@ latest ACL-enabling patch to send files to an older ACL-enabled rsync. #include "byteorder.h" #include "lib/mdfour.h" #include "lib/wildmatch.h" -@@ -685,6 +706,16 @@ struct chmod_mode_struct; +@@ -707,6 +728,16 @@ struct chmod_mode_struct; #define NORETURN __attribute__((__noreturn__)) #endif diff --git a/atimes.diff b/atimes.diff index 68b77bb..2802037 100644 --- a/atimes.diff +++ b/atimes.diff @@ -15,23 +15,22 @@ To use this patch, run these commands for a successful build: +extern int preserve_atimes; extern int relative_paths; extern int implied_dirs; - extern int flist_extra_ndx; -@@ -135,6 +136,7 @@ void show_flist_stats(void) + extern int flist_extra_cnt; +@@ -134,6 +135,7 @@ void show_flist_stats(void) static void list_file_entry(struct file_struct *f) { char permbuf[PERMSTRING_SIZE]; + time_t atime = preserve_atimes ? F_ATIME(f) : 0; + double len; - if (!f->basename) { - /* this can happen if duplicate names were removed */ -@@ -145,16 +147,18 @@ static void list_file_entry(struct file_ + if (!F_IS_ACTIVE(f)) { +@@ -146,14 +148,16 @@ static void list_file_entry(struct file_ #ifdef SUPPORT_LINKS if (preserve_links && S_ISLNK(f->mode)) { - rprintf(FINFO, "%s %11.0f %s %s -> %s\n", + rprintf(FINFO, "%s %11.0f %s %s %s -> %s\n", - permbuf, - (double)f->length, timestring(f->modtime), + permbuf, len, timestring(f->modtime), + preserve_atimes ? timestring(atime) : "", f_name(f, NULL), F_SYMLINK(f)); } else @@ -39,13 +38,12 @@ To use this patch, run these commands for a successful build: { - rprintf(FINFO, "%s %11.0f %s %s\n", + rprintf(FINFO, "%s %11.0f %s %s %s\n", - permbuf, - (double)f->length, timestring(f->modtime), + permbuf, len, timestring(f->modtime), + preserve_atimes ? timestring(atime) : "", f_name(f, NULL)); } } -@@ -312,6 +316,7 @@ static void send_file_entry(struct file_ +@@ -311,6 +315,7 @@ static void send_file_entry(struct file_ { unsigned short flags; static time_t modtime; @@ -53,7 +51,7 @@ To use this patch, run these commands for a successful build: static mode_t mode; static int64 dev; static dev_t rdev; -@@ -327,7 +332,7 @@ static void send_file_entry(struct file_ +@@ -326,7 +331,7 @@ static void send_file_entry(struct file_ if (!file) { write_byte(f, 0); @@ -62,7 +60,7 @@ To use this patch, run these commands for a successful build: dev = 0, rdev = MAKEDEV(0, 0); rdev_major = 0; uid = 0, gid = 0; -@@ -377,6 +382,13 @@ static void send_file_entry(struct file_ +@@ -376,6 +381,13 @@ static void send_file_entry(struct file_ flags |= XMIT_SAME_TIME; else modtime = file->modtime; @@ -76,7 +74,7 @@ To use this patch, run these commands for a successful build: #ifdef SUPPORT_HARD_LINKS if (tmp_idev.dev != 0) { -@@ -429,6 +441,8 @@ static void send_file_entry(struct file_ +@@ -428,6 +440,8 @@ static void send_file_entry(struct file_ write_int(f, modtime); if (!(flags & XMIT_SAME_MODE)) write_int(f, to_wire_mode(mode)); @@ -85,7 +83,7 @@ To use this patch, run these commands for a successful build: if (preserve_uid && !(flags & XMIT_SAME_UID)) { if (!numeric_ids) add_uid(uid); -@@ -495,7 +509,7 @@ static void send_file_entry(struct file_ +@@ -494,7 +508,7 @@ static void send_file_entry(struct file_ static struct file_struct *recv_file_entry(struct file_list *flist, unsigned short flags, int f) { @@ -94,7 +92,7 @@ To use this patch, run these commands for a successful build: static mode_t mode; static int64 dev; static dev_t rdev; -@@ -515,7 +529,7 @@ static struct file_struct *recv_file_ent +@@ -514,7 +528,7 @@ static struct file_struct *recv_file_ent struct file_struct *file; if (!flist) { @@ -103,7 +101,7 @@ To use this patch, run these commands for a successful build: dev = 0, rdev = MAKEDEV(0, 0); rdev_major = 0; uid = 0, gid = 0; -@@ -571,6 +585,8 @@ static struct file_struct *recv_file_ent +@@ -570,6 +584,8 @@ static struct file_struct *recv_file_ent modtime = (time_t)read_int(f); if (!(flags & XMIT_SAME_MODE)) mode = from_wire_mode(read_int(f)); @@ -112,7 +110,7 @@ To use this patch, run these commands for a successful build: if (chmod_modes && !S_ISLNK(mode)) mode = tweak_mode(mode, chmod_modes); -@@ -643,6 +659,8 @@ static struct file_struct *recv_file_ent +@@ -654,6 +670,8 @@ static struct file_struct *recv_file_ent F_UID(file) = uid; if (preserve_gid) F_GID(file) = gid; @@ -121,7 +119,7 @@ To use this patch, run these commands for a successful build: if (dirname_len) { file->dirname = lastdir = bp; -@@ -906,6 +924,8 @@ struct file_struct *make_file(const char +@@ -930,6 +948,8 @@ struct file_struct *make_file(const char F_UID(file) = st.st_uid; if (preserve_gid) F_GID(file) = st.st_gid; @@ -140,7 +138,7 @@ To use this patch, run these commands for a successful build: extern int omit_dir_times; extern int delete_mode; extern int delete_before; -@@ -477,6 +478,9 @@ void itemize(struct file_struct *file, i +@@ -475,6 +476,9 @@ void itemize(struct file_struct *file, i && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname)) || (keep_time && cmp_time(file->modtime, st->st_mtime) != 0)) iflags |= ITEM_REPORT_TIME; @@ -150,13 +148,13 @@ To use this patch, run these commands for a successful build: if ((file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS)) iflags |= ITEM_REPORT_PERMS; if (preserve_uid && am_root && F_UID(file) != st->st_uid) -@@ -787,6 +791,8 @@ static int try_dests_reg(struct file_str +@@ -785,6 +789,8 @@ static int try_dests_reg(struct file_str if (hard_link_one(file, ndx, fname, 0, stp, cmpbuf, 1, i, code) < 0) goto try_a_copy; + if (preserve_atimes) + set_file_attrs(fname, file, stp, 0); - if (preserve_hard_links && IS_HLINKED(file)) + if (preserve_hard_links && F_IS_HLINKED(file)) hard_link_cluster(file, ndx, itemizing, code, j); } else --- old/log.c @@ -168,8 +166,8 @@ To use this patch, run these commands for a successful build: +extern int preserve_atimes; extern int preserve_uid; extern int preserve_gid; - extern int flist_extra_ndx; -@@ -618,7 +619,8 @@ static void log_formatted(enum logcode c + extern int stdout_format_has_i; +@@ -625,7 +626,8 @@ static void log_formatted(enum logcode c c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p'; c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o'; c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g'; @@ -212,11 +210,11 @@ To use this patch, run these commands for a successful build: {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 }, {"super", 0, POPT_ARG_VAL, &am_root, 2, 0, 0 }, @@ -1223,6 +1228,8 @@ int parse_arguments(int *argc, const cha - preserve_uid = flist_extra_ndx++; + preserve_uid = ++flist_extra_cnt; if (preserve_gid) - preserve_gid = flist_extra_ndx++; + preserve_gid = ++flist_extra_cnt; + if (preserve_atimes) -+ preserve_atimes = flist_extra_ndx++; ++ preserve_atimes = ++flist_extra_cnt; *argv = poptGetArgs(pc); *argc = count_args(*argv); @@ -297,7 +295,7 @@ To use this patch, run these commands for a successful build: /* These flags are used in the live flist data. */ -@@ -120,6 +121,7 @@ +@@ -121,6 +122,7 @@ #define ATTRS_REPORT (1<<0) #define ATTRS_SKIP_MTIME (1<<1) @@ -305,22 +303,22 @@ To use this patch, run these commands for a successful build: #define FULL_FLUSH 1 #define NORMAL_FLUSH 0 -@@ -532,6 +534,7 @@ union flist_extras { - struct idev *idev; /* The hard-link info during matching */ - struct hlist *hlist; /* The hard-link info after matching */ - int32 num; /* A general-purpose number */ -+ time_t time; /* A time value */ - }; - - #define FLIST_EXTRA(f,j) ((union flist_extras *)(f))[-(j)] -@@ -540,6 +543,7 @@ union flist_extras { - /* When enabled, all entries have these: */ - #define F_UID(f) FLIST_EXTRA(f, preserve_uid).uid - #define F_GID(f) FLIST_EXTRA(f, preserve_gid).gid -+#define F_ATIME(f) FLIST_EXTRA(f, preserve_atimes).time +@@ -511,6 +513,7 @@ struct file_struct { + union flist_extras { + uid_t uid; /* The user ID number */ + uid_t gid; /* The group ID number or GID_NONE */ ++ time_t utime; /* A unix-time value */ + struct idev *idev; /* The hard-link info during matching */ + struct hlist *hlist; /* The hard-link info after matching */ + uint32 unum; /* An unsigned number */ +@@ -551,6 +554,7 @@ extern int preserve_gid; + /* When the associated option is on, all entries will have these present: */ + #define F_UID(f) REQ_EXTRA(f, preserve_uid)->uid + #define F_GID(f) REQ_EXTRA(f, preserve_gid)->gid ++#define F_ATIME(f) REQ_EXTRA(f, preserve_atimes)->utime /* These are per-entry optional and mutally exclusive: */ - #define F_IDEV(f) FLIST_EXTRA(f, flist_extra_ndx).idev + #define F_IDEV(f) OPT_EXTRA(f, LEN64_BUMP(f))->idev --- old/rsync.yo +++ new/rsync.yo @@ -328,8 +328,9 @@ to the detailed description below for a diff --git a/date-only.diff b/date-only.diff index d63b154..5af7e2d 100644 --- a/date-only.diff +++ b/date-only.diff @@ -24,13 +24,14 @@ To use this patch, run these commands for a successful build: extern int size_only; extern OFF_T max_size; extern OFF_T min_size; -@@ -378,6 +379,8 @@ void itemize(struct file_struct *file, i +@@ -507,6 +508,9 @@ void itemize(struct file_struct *file, i /* Perform our quick-check heuristic for determining if a file is unchanged. */ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) { + if (date_only) + return cmp_time(st->st_mtime, file->modtime) == 0; - if (st->st_size != file->length) ++ + if (st->st_size != F_LENGTH(file)) return 0; --- old/options.c @@ -43,7 +44,7 @@ To use this patch, run these commands for a successful build: int daemon_bwlimit = 0; int bwlimit = 0; int fuzzy_basis = 0; -@@ -343,6 +344,7 @@ void usage(enum logcode F) +@@ -340,6 +341,7 @@ void usage(enum logcode F) rprintf(F," --timeout=TIME set I/O timeout in seconds\n"); rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n"); rprintf(F," --size-only skip files that match in size\n"); @@ -51,7 +52,7 @@ To use this patch, run these commands for a successful build: rprintf(F," --modify-window=NUM compare mod-times with reduced accuracy\n"); rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n"); rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n"); -@@ -463,6 +465,7 @@ static struct poptOption long_options[] +@@ -460,6 +462,7 @@ static struct poptOption long_options[] {"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 }, {"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 }, {"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 }, @@ -59,7 +60,7 @@ To use this patch, run these commands for a successful build: {"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 }, {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 }, {"existing", 0, POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 }, -@@ -1676,6 +1679,9 @@ void server_options(char **args,int *arg +@@ -1682,6 +1685,9 @@ void server_options(char **args,int *arg args[ac++] = "--size-only"; } @@ -71,7 +72,7 @@ To use this patch, run these commands for a successful build: goto oom; --- old/rsync.yo +++ new/rsync.yo -@@ -360,6 +360,7 @@ to the detailed description below for a +@@ -361,6 +361,7 @@ to the detailed description below for a --timeout=TIME set I/O timeout in seconds -I, --ignore-times don't skip files that match size and time --size-only skip files that match in size @@ -79,7 +80,7 @@ To use this patch, run these commands for a successful build: --modify-window=NUM compare mod-times with reduced accuracy -T, --temp-dir=DIR create temporary files in directory DIR -y, --fuzzy find similar file for basis if no dest file -@@ -477,6 +478,12 @@ regardless of timestamp. This is useful +@@ -478,6 +479,12 @@ regardless of timestamp. This is useful after using another mirroring system which may not preserve timestamps exactly. diff --git a/early-checksum.diff b/early-checksum.diff index a819d2f..d910ab4 100644 --- a/early-checksum.diff +++ b/early-checksum.diff @@ -24,7 +24,7 @@ To use this patch, run these commands for a successful build: extern int module_id; extern int ignore_errors; extern int numeric_ids; -@@ -723,6 +724,15 @@ static struct file_struct *recv_file_ent +@@ -730,6 +731,15 @@ static struct file_struct *recv_file_ent bp = tmp_sum; } read_buf(f, bp, checksum_len); @@ -42,7 +42,7 @@ To use this patch, run these commands for a successful build: return file; --- old/generator.c +++ new/generator.c -@@ -71,6 +71,7 @@ extern int ignore_timeout; +@@ -70,6 +70,7 @@ extern int ignore_timeout; extern int protocol_version; extern int fuzzy_basis; extern int always_checksum; @@ -50,7 +50,7 @@ To use this patch, run these commands for a successful build: extern int checksum_len; extern char *partial_dir; extern char *basis_dir[]; -@@ -507,7 +508,8 @@ void itemize(struct file_struct *file, i +@@ -505,7 +506,8 @@ void itemize(struct file_struct *file, i /* Perform our quick-check heuristic for determining if a file is unchanged. */ @@ -58,9 +58,9 @@ To use this patch, run these commands for a successful build: +int unchanged_file(char *fn, int fnamecmp_type, struct file_struct *file, + STRUCT_STAT *st) { - if (st->st_size != file->length) + if (st->st_size != F_LENGTH(file)) return 0; -@@ -516,6 +518,8 @@ int unchanged_file(char *fn, struct file +@@ -514,6 +516,8 @@ int unchanged_file(char *fn, struct file of the file time to determine whether to sync */ if (always_checksum && S_ISREG(st->st_mode)) { char sum[MD4_SUM_LENGTH]; @@ -69,7 +69,7 @@ To use this patch, run these commands for a successful build: file_checksum(fn, sum, st->st_size); return memcmp(sum, F_SUM(file), checksum_len) == 0; } -@@ -752,7 +756,7 @@ static int try_dests_reg(struct file_str +@@ -750,7 +754,7 @@ static int try_dests_reg(struct file_str match_level = 1; /* FALL THROUGH */ case 1: @@ -78,7 +78,7 @@ To use this patch, run these commands for a successful build: continue; best_match = j; match_level = 2; -@@ -1420,7 +1424,7 @@ static void recv_generator(char *fname, +@@ -1418,7 +1422,7 @@ static void recv_generator(char *fname, ; else if (fnamecmp_type == FNAMECMP_FUZZY) ; @@ -89,7 +89,7 @@ To use this patch, run these commands for a successful build: handle_partial_dir(partialptr, PDIR_DELETE); --- old/hlink.c +++ new/hlink.c -@@ -235,7 +235,7 @@ int hard_link_check(struct file_struct * +@@ -234,7 +234,7 @@ int hard_link_check(struct file_struct * } break; } @@ -176,11 +176,11 @@ To use this patch, run these commands for a successful build: --- old/rsync.h +++ new/rsync.h -@@ -61,6 +61,7 @@ - #define FLAG_SENT (1<<1) /* sender/generator */ - #define FLAG_XFER_DIR (1<<2) /* sender/receiver/generator */ - #define FLAG_MOUNT_DIR (1<<3) /* sender/generator */ -+#define FLAG_SUM_DIFFERS (1<<3) /* receiver/generator (non-dirs) */ - #define FLAG_MISSING_DIR (1<<4) /* generator (dirs only) */ - #define FLAG_HLINK_INFO (1<<5) /* receiver/generator */ +@@ -66,6 +66,7 @@ #define FLAG_HLINK_FIRST (1<<6) /* receiver/generator */ + #define FLAG_HLINK_LAST (1<<7) /* receiver/generator */ + #define FLAG_LENGTH64 (1<<8) /* sender/receiver/generator */ ++#define FLAG_SUM_DIFFERS (1<<9) /* receiver/generator */ + + /* update this if you make incompatible changes */ + #define PROTOCOL_VERSION 30 diff --git a/flags.diff b/flags.diff index 4a008d0..66664f0 100644 --- a/flags.diff +++ b/flags.diff @@ -31,7 +31,7 @@ TODO: fix --delete-delay to work with --flags option. extern int preserve_uid; extern int preserve_gid; extern int relative_paths; -@@ -313,6 +314,9 @@ static void send_file_entry(struct file_ +@@ -312,6 +313,9 @@ static void send_file_entry(struct file_ unsigned short flags; static time_t modtime; static mode_t mode; @@ -41,7 +41,7 @@ TODO: fix --delete-delay to work with --flags option. static int64 dev; static dev_t rdev; static uint32 rdev_major; -@@ -343,6 +347,12 @@ static void send_file_entry(struct file_ +@@ -342,6 +346,12 @@ static void send_file_entry(struct file_ flags |= XMIT_SAME_MODE; else mode = file->mode; @@ -54,7 +54,7 @@ TODO: fix --delete-delay to work with --flags option. if ((preserve_devices && IS_DEVICE(mode)) || (preserve_specials && IS_SPECIAL(mode))) { if (protocol_version < 28) { -@@ -429,6 +439,10 @@ static void send_file_entry(struct file_ +@@ -428,6 +438,10 @@ static void send_file_entry(struct file_ write_int(f, modtime); if (!(flags & XMIT_SAME_MODE)) write_int(f, to_wire_mode(mode)); @@ -65,7 +65,7 @@ TODO: fix --delete-delay to work with --flags option. if (preserve_uid && !(flags & XMIT_SAME_UID)) { if (!numeric_ids) add_uid(uid); -@@ -497,6 +511,9 @@ static struct file_struct *recv_file_ent +@@ -496,6 +510,9 @@ static struct file_struct *recv_file_ent { static time_t modtime; static mode_t mode; @@ -75,7 +75,7 @@ TODO: fix --delete-delay to work with --flags option. static int64 dev; static dev_t rdev; static uint32 rdev_major; -@@ -571,9 +588,12 @@ static struct file_struct *recv_file_ent +@@ -570,9 +587,12 @@ static struct file_struct *recv_file_ent modtime = (time_t)read_int(f); if (!(flags & XMIT_SAME_MODE)) mode = from_wire_mode(read_int(f)); @@ -89,9 +89,9 @@ TODO: fix --delete-delay to work with --flags option. if (preserve_uid && !(flags & XMIT_SAME_UID)) uid = (uid_t)read_int(f); -@@ -639,6 +659,10 @@ static struct file_struct *recv_file_ent - file->modtime = modtime; - file->length = file_length; +@@ -650,6 +670,10 @@ static struct file_struct *recv_file_ent + OPT_EXTRA(file, 0)->unum = (uint32)(file_length >> 32); + } file->mode = mode; +#ifdef SUPPORT_FLAGS + if (preserve_fileflags) @@ -100,9 +100,9 @@ TODO: fix --delete-delay to work with --flags option. if (preserve_uid) F_UID(file) = uid; if (preserve_gid) -@@ -902,6 +926,10 @@ struct file_struct *make_file(const char - file->modtime = st.st_mtime; - file->length = st.st_size; +@@ -926,6 +950,10 @@ struct file_struct *make_file(const char + OPT_EXTRA(file, 0)->unum = (uint32)(st.st_size >> 32); + } file->mode = st.st_mode; +#ifdef SUPPORT_FLAGS + if (preserve_fileflags) @@ -113,7 +113,7 @@ TODO: fix --delete-delay to work with --flags option. if (preserve_gid) --- old/generator.c +++ new/generator.c -@@ -101,6 +101,12 @@ int non_perishable_cnt = 0; +@@ -99,6 +99,12 @@ int non_perishable_cnt = 0; static int deletion_count = 0; /* used to implement --max-delete */ static FILE *delete_delay_fp = NULL; @@ -126,7 +126,7 @@ TODO: fix --delete-delay to work with --flags option. /* For calling delete_item() and delete_dir_contents(). */ #define DEL_RECURSE (1<<1) /* recurse */ #define DEL_DIR_IS_EMPTY (1<<2) /* internal delete_FUNCTIONS use only */ -@@ -116,7 +122,6 @@ enum delret { +@@ -114,7 +120,6 @@ enum delret { /* Forward declaration for delete_item(). */ static enum delret delete_dir_contents(char *fname, int flags); @@ -134,7 +134,7 @@ TODO: fix --delete-delay to work with --flags option. static int is_backup_file(char *fn) { int k = strlen(fn) - backup_suffix_len; -@@ -129,17 +134,20 @@ static int is_backup_file(char *fn) +@@ -127,17 +132,20 @@ static int is_backup_file(char *fn) * Note that fbuf must point to a MAXPATHLEN buffer if the mode indicates it's * a directory! (The buffer is used for recursion, but returned unchanged.) */ @@ -158,7 +158,7 @@ TODO: fix --delete-delay to work with --flags option. if (S_ISDIR(mode) && !(flags & DEL_DIR_IS_EMPTY)) { ignore_perishable = 1; /* If DEL_RECURSE is not set, this just reports emptiness. */ -@@ -251,7 +259,7 @@ static enum delret delete_dir_contents(c +@@ -249,7 +257,7 @@ static enum delret delete_dir_contents(c if (S_ISDIR(fp->mode) && delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS) ret = DR_NOT_EMPTY; @@ -167,7 +167,7 @@ TODO: fix --delete-delay to work with --flags option. ret = DR_NOT_EMPTY; } -@@ -403,10 +411,10 @@ static void delete_in_dir(struct file_li +@@ -401,10 +409,10 @@ static void delete_in_dir(struct file_li } if (flist_find(flist, fp) < 0) { f_name(fp, delbuf); @@ -180,7 +180,7 @@ TODO: fix --delete-delay to work with --flags option. } } -@@ -1101,7 +1109,7 @@ static void recv_generator(char *fname, +@@ -1099,7 +1107,7 @@ static void recv_generator(char *fname, * we need to delete it. If it doesn't exist, then * (perhaps recursively) create it. */ if (statret == 0 && !S_ISDIR(st.st_mode)) { @@ -189,7 +189,7 @@ TODO: fix --delete-delay to work with --flags option. return; statret = -1; } -@@ -1195,7 +1203,7 @@ static void recv_generator(char *fname, +@@ -1193,7 +1201,7 @@ static void recv_generator(char *fname, } /* Not the right symlink (or not a symlink), so * delete it. */ @@ -198,7 +198,7 @@ TODO: fix --delete-delay to work with --flags option. return; } else if (basis_dir[0] != NULL) { int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &st, -@@ -1267,7 +1275,7 @@ static void recv_generator(char *fname, +@@ -1265,7 +1273,7 @@ static void recv_generator(char *fname, goto return_with_success; return; } @@ -207,7 +207,7 @@ TODO: fix --delete-delay to work with --flags option. return; } else if (basis_dir[0] != NULL) { int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &st, -@@ -1353,7 +1361,7 @@ static void recv_generator(char *fname, +@@ -1351,7 +1359,7 @@ static void recv_generator(char *fname, fnamecmp_type = FNAMECMP_FNAME; if (statret == 0 && !S_ISREG(st.st_mode)) { @@ -290,11 +290,11 @@ TODO: fix --delete-delay to work with --flags option. snprintf(err_buf, sizeof err_buf, "--write-batch and --read-batch can not be used together\n"); @@ -1223,6 +1241,8 @@ int parse_arguments(int *argc, const cha - preserve_uid = flist_extra_ndx++; + preserve_uid = ++flist_extra_cnt; if (preserve_gid) - preserve_gid = flist_extra_ndx++; + preserve_gid = ++flist_extra_cnt; + if (preserve_fileflags) -+ preserve_fileflags = flist_extra_ndx++; ++ preserve_fileflags = ++flist_extra_cnt; *argv = poptGetArgs(pc); *argc = count_args(*argv); @@ -411,7 +411,7 @@ TODO: fix --delete-delay to work with --flags option. /* These flags are used in the live flist data. */ -@@ -347,6 +348,10 @@ enum msgcode { +@@ -348,6 +349,10 @@ enum msgcode { #define schar char #endif @@ -422,14 +422,14 @@ TODO: fix --delete-delay to work with --flags option. /* Find a variable that is either exactly 32-bits or longer. * If some code depends on 32-bit truncation, it will need to * take special action in a "#if SIZEOF_INT32 > 4" section. */ -@@ -540,6 +545,7 @@ union flist_extras { - /* When enabled, all entries have these: */ - #define F_UID(f) FLIST_EXTRA(f, preserve_uid).uid - #define F_GID(f) FLIST_EXTRA(f, preserve_gid).gid -+#define F_FFLAGS(f) FLIST_EXTRA(f, preserve_fileflags).num +@@ -551,6 +556,7 @@ extern int preserve_gid; + /* When the associated option is on, all entries will have these present: */ + #define F_UID(f) REQ_EXTRA(f, preserve_uid)->uid + #define F_GID(f) REQ_EXTRA(f, preserve_gid)->gid ++#define F_FFLAGS(f) REQ_EXTRA(f, preserve_fileflags).num /* These are per-entry optional and mutally exclusive: */ - #define F_IDEV(f) FLIST_EXTRA(f, flist_extra_ndx).idev + #define F_IDEV(f) OPT_EXTRA(f, LEN64_BUMP(f))->idev --- old/rsync.yo +++ new/rsync.yo @@ -321,6 +321,7 @@ to the detailed description below for a diff --git a/source-filter_dest-filter.diff b/source-filter_dest-filter.diff index 833d749..f50e861 100644 --- a/source-filter_dest-filter.diff +++ b/source-filter_dest-filter.diff @@ -40,12 +40,12 @@ To use this patch, run these commands for a successful build: extern int size_only; extern OFF_T max_size; extern OFF_T min_size; -@@ -378,7 +379,7 @@ void itemize(struct file_struct *file, i +@@ -507,7 +508,7 @@ void itemize(struct file_struct *file, i /* Perform our quick-check heuristic for determining if a file is unchanged. */ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) { -- if (st->st_size != file->length) -+ if (!times_only && st->st_size != file->length) +- if (st->st_size != F_LENGTH(file)) ++ if (!times_only && st->st_size != F_LENGTH(file)) return 0; /* if always checksum is set then we use the checksum instead @@ -79,7 +79,7 @@ To use this patch, run these commands for a successful build: char *rsync_path = RSYNC_PATH; char *backup_dir = NULL; char backup_dir_buf[MAXPATHLEN]; -@@ -343,6 +346,7 @@ void usage(enum logcode F) +@@ -340,6 +343,7 @@ void usage(enum logcode F) rprintf(F," --timeout=TIME set I/O timeout in seconds\n"); rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n"); rprintf(F," --size-only skip files that match in size\n"); @@ -87,7 +87,7 @@ To use this patch, run these commands for a successful build: rprintf(F," --modify-window=NUM compare mod-times with reduced accuracy\n"); rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n"); rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n"); -@@ -380,6 +384,8 @@ void usage(enum logcode F) +@@ -377,6 +381,8 @@ void usage(enum logcode F) rprintf(F," --write-batch=FILE write a batched update to FILE\n"); rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n"); rprintf(F," --read-batch=FILE read a batched update from FILE\n"); @@ -96,7 +96,7 @@ To use this patch, run these commands for a successful build: rprintf(F," --protocol=NUM force an older protocol version to be used\n"); #ifdef INET6 rprintf(F," -4, --ipv4 prefer IPv4\n"); -@@ -463,6 +469,7 @@ static struct poptOption long_options[] +@@ -460,6 +466,7 @@ static struct poptOption long_options[] {"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 }, {"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 }, {"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 }, @@ -104,7 +104,7 @@ To use this patch, run these commands for a successful build: {"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 }, {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 }, {"existing", 0, POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 }, -@@ -541,6 +548,8 @@ static struct poptOption long_options[] +@@ -539,6 +546,8 @@ static struct poptOption long_options[] {"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 }, {"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 }, {"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 }, @@ -113,7 +113,7 @@ To use this patch, run these commands for a successful build: {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 }, {"server", 0, POPT_ARG_NONE, 0, OPT_SERVER, 0, 0 }, -@@ -1410,6 +1419,16 @@ int parse_arguments(int *argc, const cha +@@ -1409,6 +1418,16 @@ int parse_arguments(int *argc, const cha } } @@ -130,7 +130,7 @@ To use this patch, run these commands for a successful build: if (files_from) { char *h, *p; int q; -@@ -1676,6 +1695,25 @@ void server_options(char **args,int *arg +@@ -1682,6 +1701,25 @@ void server_options(char **args,int *arg args[ac++] = "--size-only"; } @@ -158,7 +158,7 @@ To use this patch, run these commands for a successful build: goto oom; --- old/pipe.c +++ new/pipe.c -@@ -166,3 +166,77 @@ pid_t local_child(int argc, char **argv, +@@ -165,3 +165,77 @@ pid_t local_child(int argc, char **argv, return pid; } @@ -246,7 +246,7 @@ To use this patch, run these commands for a successful build: extern char *stdout_format; extern char *tmpdir; extern char *partial_dir; -@@ -351,6 +352,8 @@ int recv_files(int f_in, struct file_lis +@@ -348,6 +349,8 @@ int recv_files(int f_in, struct file_lis enum logcode log_code = log_before_transfer ? FLOG : FINFO; int max_phase = protocol_version >= 29 ? 2 : 1; int i, recv_ok; @@ -255,7 +255,7 @@ To use this patch, run these commands for a successful build: if (verbose > 2) rprintf(FINFO,"recv_files(%d) starting\n",flist->count); -@@ -365,6 +368,23 @@ int recv_files(int f_in, struct file_lis +@@ -362,6 +365,23 @@ int recv_files(int f_in, struct file_lis updating_basis = inplace; @@ -279,7 +279,7 @@ To use this patch, run these commands for a successful build: while (1) { cleanup_disable(); -@@ -610,6 +630,9 @@ int recv_files(int f_in, struct file_lis +@@ -607,6 +627,9 @@ int recv_files(int f_in, struct file_lis else if (!am_server && verbose && do_progress) rprintf(FINFO, "%s\n", fname); @@ -288,8 +288,8 @@ To use this patch, run these commands for a successful build: + /* recv file data */ recv_ok = receive_data(f_in, fnamecmp, fd1, st.st_size, - fname, fd2, file->length); -@@ -624,6 +647,16 @@ int recv_files(int f_in, struct file_lis + fname, fd2, F_LENGTH(file)); +@@ -621,6 +644,16 @@ int recv_files(int f_in, struct file_lis exit_cleanup(RERR_FILEIO); } @@ -308,7 +308,7 @@ To use this patch, run these commands for a successful build: if (partialptr == fname) --- old/rsync.h +++ new/rsync.h -@@ -104,6 +104,7 @@ +@@ -105,6 +105,7 @@ #define IOERR_DEL_LIMIT (1<<2) #define MAX_ARGS 1000 @@ -318,7 +318,7 @@ To use this patch, run these commands for a successful build: --- old/rsync.yo +++ new/rsync.yo -@@ -360,6 +360,7 @@ to the detailed description below for a +@@ -361,6 +361,7 @@ to the detailed description below for a --timeout=TIME set I/O timeout in seconds -I, --ignore-times don't skip files that match size and time --size-only skip files that match in size @@ -326,7 +326,7 @@ To use this patch, run these commands for a successful build: --modify-window=NUM compare mod-times with reduced accuracy -T, --temp-dir=DIR create temporary files in directory DIR -y, --fuzzy find similar file for basis if no dest file -@@ -397,6 +398,8 @@ to the detailed description below for a +@@ -398,6 +399,8 @@ to the detailed description below for a --write-batch=FILE write a batched update to FILE --only-write-batch=FILE like --write-batch but w/o updating dest --read-batch=FILE read a batched update from FILE @@ -335,7 +335,7 @@ To use this patch, run these commands for a successful build: --protocol=NUM force an older protocol version to be used --checksum-seed=NUM set block/file checksum seed (advanced) -4, --ipv4 prefer IPv4 -@@ -1759,6 +1762,33 @@ file previously generated by bf(--write- +@@ -1772,6 +1775,33 @@ file previously generated by bf(--write- If em(FILE) is bf(-), the batch data will be read from standard input. See the "BATCH MODE" section for details. @@ -379,7 +379,7 @@ To use this patch, run these commands for a successful build: extern char *stdout_format; -@@ -224,6 +225,26 @@ void send_files(struct file_list *flist, +@@ -174,6 +175,26 @@ void send_files(struct file_list *flist, enum logcode log_code = log_before_transfer ? FLOG : FINFO; int f_xfer = write_batch < 0 ? batch_fd : f_out; int i, j; @@ -406,7 +406,7 @@ To use this patch, run these commands for a successful build: if (verbose > 2) rprintf(FINFO, "send_files starting\n"); -@@ -297,6 +318,7 @@ void send_files(struct file_list *flist, +@@ -247,6 +268,7 @@ void send_files(struct file_list *flist, return; } @@ -414,7 +414,7 @@ To use this patch, run these commands for a successful build: fd = do_open(fname, O_RDONLY, 0); if (fd == -1) { if (errno == ENOENT) { -@@ -325,6 +347,33 @@ void send_files(struct file_list *flist, +@@ -275,6 +297,33 @@ void send_files(struct file_list *flist, return; } @@ -448,7 +448,7 @@ To use this patch, run these commands for a successful build: if (st.st_size) { int32 read_size = MAX(s->blength * 3, MAX_MAP_SIZE); mbuf = map_file(fd, st.st_size, read_size, s->blength); -@@ -366,6 +415,8 @@ void send_files(struct file_list *flist, +@@ -316,6 +365,8 @@ void send_files(struct file_list *flist, } } close(fd); diff --git a/xattrs.diff b/xattrs.diff index 2bfc713..8c9d532 100644 --- a/xattrs.diff +++ b/xattrs.diff @@ -54,7 +54,7 @@ TODO: extern int preserve_devices; extern int preserve_specials; extern int preserve_links; -@@ -137,6 +138,9 @@ static int make_bak_dir(char *fullpath) +@@ -135,6 +136,9 @@ static int make_bak_dir(char *fullpath) #ifdef SUPPORT_ACLS sx.acc_acl = sx.def_acl = NULL; #endif @@ -64,7 +64,7 @@ TODO: if (!(file = make_file(rel, NULL, NULL, 0, NO_FILTERS))) continue; #ifdef SUPPORT_ACLS -@@ -145,6 +149,12 @@ static int make_bak_dir(char *fullpath) +@@ -143,6 +147,12 @@ static int make_bak_dir(char *fullpath) cache_acl(file, &sx); } #endif @@ -77,7 +77,7 @@ TODO: set_file_attrs(fullpath, file, NULL, 0); free(file); } -@@ -196,6 +206,9 @@ static int keep_backup(const char *fname +@@ -194,6 +204,9 @@ static int keep_backup(const char *fname #ifdef SUPPORT_ACLS sx.acc_acl = sx.def_acl = NULL; #endif @@ -87,7 +87,7 @@ TODO: if (!(file = make_file(fname, NULL, NULL, 0, NO_FILTERS))) return 1; /* the file could have disappeared */ -@@ -211,6 +224,12 @@ static int keep_backup(const char *fname +@@ -209,6 +222,12 @@ static int keep_backup(const char *fname cache_acl(file, &sx); } #endif @@ -153,7 +153,7 @@ TODO: extern int preserve_links; extern int preserve_hard_links; extern int preserve_devices; -@@ -738,6 +739,10 @@ static struct file_struct *recv_file_ent +@@ -745,6 +746,10 @@ static struct file_struct *recv_file_ent if (preserve_acls) receive_acl(file, f); #endif @@ -164,7 +164,7 @@ TODO: return file; } -@@ -991,7 +996,7 @@ static struct file_struct *send_file_nam +@@ -1006,7 +1011,7 @@ static struct file_struct *send_file_nam unsigned short flags) { struct file_struct *file; @@ -173,7 +173,7 @@ TODO: statx sx; #endif -@@ -1011,6 +1016,13 @@ static struct file_struct *send_file_nam +@@ -1026,6 +1031,13 @@ static struct file_struct *send_file_nam return NULL; } #endif @@ -187,7 +187,7 @@ TODO: maybe_emit_filelist_progress(flist->count + flist_count_offset); -@@ -1021,6 +1033,10 @@ static struct file_struct *send_file_nam +@@ -1036,6 +1048,10 @@ static struct file_struct *send_file_nam if (preserve_acls && f >= 0) send_acl(&sx, f); #endif @@ -453,11 +453,11 @@ TODO: default: /* A large opt value means that set_refuse_options() @@ -1255,6 +1276,8 @@ int parse_arguments(int *argc, const cha - preserve_gid = flist_extra_ndx++; + preserve_gid = ++flist_extra_cnt; if (preserve_acls) - preserve_acls = flist_extra_ndx++; + preserve_acls = ++flist_extra_cnt; + if (preserve_xattrs) -+ preserve_xattrs = flist_extra_ndx++; ++ preserve_xattrs = ++flist_extra_cnt; *argv = poptGetArgs(pc); *argc = count_args(*argv); @@ -495,7 +495,7 @@ TODO: * will enable owner-writability using chmod, if necessary. --- old/rsync.h +++ new/rsync.h -@@ -503,6 +503,10 @@ struct idev { +@@ -504,6 +504,10 @@ struct idev { #define ACLS_NEED_MASK 1 #endif @@ -506,15 +506,15 @@ TODO: #define GID_NONE ((gid_t)-1) #define HL_CHECK_MASTER 0 -@@ -549,6 +553,7 @@ union flist_extras { - #define F_UID(f) FLIST_EXTRA(f, preserve_uid).uid - #define F_GID(f) FLIST_EXTRA(f, preserve_gid).gid - #define F_ACL(f) FLIST_EXTRA(f, preserve_acls).num -+#define F_XATTR(f) FLIST_EXTRA(f, preserve_xattrs).num +@@ -560,6 +564,7 @@ extern int preserve_gid; + #define F_UID(f) REQ_EXTRA(f, preserve_uid)->uid + #define F_GID(f) REQ_EXTRA(f, preserve_gid)->gid + #define F_ACL(f) REQ_EXTRA(f, preserve_acls)->unum ++#define F_XATTR(f) REQ_EXTRA(f, preserve_xattrs)->unum /* These are per-entry optional and mutally exclusive: */ - #define F_IDEV(f) FLIST_EXTRA(f, flist_extra_ndx).idev -@@ -712,6 +717,9 @@ typedef struct { + #define F_IDEV(f) OPT_EXTRA(f, LEN64_BUMP(f))->idev +@@ -734,6 +739,9 @@ typedef struct { struct rsync_acl *acc_acl; /* access ACL */ struct rsync_acl *def_acl; /* default ACL */ #endif