The latest patches.
[rsync.git/patches.git] / fileflags.diff
index f486e1389089dabf4bc7f7d930ce9fdc381e6516..1e51944def18a820def5552c7bead558dab87cd5 100644 (file)
@@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build:
     ./configure                         (optional if already run)
     make
 
-based-on: db5bfe67a5d022f9ad25340db6bc2cca2cbbdb65
+based-on: f9e29dfb0912f2689ad10a7ba14ebb3ed43cf153
 diff --git a/compat.c b/compat.c
 --- a/compat.c
 +++ b/compat.c
@@ -27,8 +27,8 @@ diff --git a/compat.c b/compat.c
  extern int xfer_flags_as_varint;
  extern int need_messages_from_generator;
  extern int delete_mode, delete_before, delete_during, delete_after;
-@@ -80,7 +82,7 @@ int do_negotiated_strings = 0;
- int xmit_id0_names = 0;
+@@ -86,7 +88,7 @@ struct name_num_item *xattr_sum_nni;
+ int xattr_sum_len = 0;
  
  /* These index values are for the file-list's extra-attribute array. */
 -int pathname_ndx, depth_ndx, atimes_ndx, crtimes_ndx, uid_ndx, gid_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
@@ -36,7 +36,7 @@ diff --git a/compat.c b/compat.c
  
  int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
  int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -578,6 +580,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -588,6 +590,8 @@ void setup_protocol(int f_out,int f_in)
                uid_ndx = ++file_extra_cnt;
        if (preserve_gid)
                gid_ndx = ++file_extra_cnt;
@@ -45,7 +45,7 @@ diff --git a/compat.c b/compat.c
        if (preserve_acls && !am_sender)
                acls_ndx = ++file_extra_cnt;
        if (preserve_xattrs)
-@@ -741,6 +745,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -751,6 +755,10 @@ void setup_protocol(int f_out,int f_in)
                        fprintf(stderr, "Both rsync versions must be at least 3.2.0 for --crtimes.\n");
                        exit_cleanup(RERR_PROTOCOL);
                }
@@ -104,7 +104,7 @@ diff --git a/delete.c b/delete.c
 diff --git a/flist.c b/flist.c
 --- a/flist.c
 +++ b/flist.c
-@@ -53,6 +53,7 @@ extern int preserve_links;
+@@ -52,6 +52,7 @@ extern int preserve_links;
  extern int preserve_hard_links;
  extern int preserve_devices;
  extern int preserve_specials;
@@ -112,7 +112,7 @@ diff --git a/flist.c b/flist.c
  extern int delete_during;
  extern int missing_args;
  extern int eol_nulls;
-@@ -386,6 +387,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
+@@ -388,6 +389,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
        static time_t crtime;
  #endif
        static mode_t mode;
@@ -122,7 +122,7 @@ diff --git a/flist.c b/flist.c
  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
  #endif
-@@ -429,6 +433,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
+@@ -431,6 +435,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
                xflags |= XMIT_SAME_MODE;
        else
                mode = file->mode;
@@ -137,7 +137,7 @@ diff --git a/flist.c b/flist.c
  
        if (preserve_devices && IS_DEVICE(mode)) {
                if (protocol_version < 28) {
-@@ -590,6 +602,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
+@@ -592,6 +604,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file,
  #endif
        if (!(xflags & XMIT_SAME_MODE))
                write_int(f, to_wire_mode(mode));
@@ -148,7 +148,7 @@ diff --git a/flist.c b/flist.c
        if (atimes_ndx && !S_ISDIR(mode) && !(xflags & XMIT_SAME_ATIME))
                write_varlong(f, atime, 4);
        if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
-@@ -684,6 +700,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -686,6 +702,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
        static time_t crtime;
  #endif
        static mode_t mode;
@@ -158,7 +158,7 @@ diff --git a/flist.c b/flist.c
  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
  #endif
-@@ -801,6 +820,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -803,6 +822,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
  #ifdef SUPPORT_CRTIMES
                        if (crtimes_ndx)
                                crtime = F_CRTIME(first);
@@ -169,7 +169,7 @@ diff --git a/flist.c b/flist.c
  #endif
                        if (preserve_uid)
                                uid = F_OWNER(first);
-@@ -874,6 +897,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -876,6 +899,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
  
        if (chmod_modes && !S_ISLNK(mode) && mode)
                mode = tweak_mode(mode, chmod_modes);
@@ -180,7 +180,7 @@ diff --git a/flist.c b/flist.c
  
        if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
                if (protocol_version < 30)
-@@ -1055,6 +1082,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -1057,6 +1084,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
        }
  #endif
        file->mode = mode;
@@ -191,7 +191,7 @@ diff --git a/flist.c b/flist.c
        if (preserve_uid)
                F_OWNER(file) = uid;
        if (preserve_gid) {
-@@ -1468,6 +1499,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1470,6 +1501,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
        }
  #endif
        file->mode = st.st_mode;
@@ -241,7 +241,7 @@ diff --git a/generator.c b/generator.c
  #ifdef SUPPORT_ACLS
                if (preserve_acls && !S_ISLNK(file->mode)) {
                        if (!ACL_READY(*sxp))
-@@ -1451,6 +1462,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1454,6 +1465,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                if (!preserve_perms) { /* See comment in non-dir code below. */
                        file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, statret == 0);
                }
@@ -252,7 +252,7 @@ diff --git a/generator.c b/generator.c
                if (statret != 0 && basis_dir[0] != NULL) {
                        int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx, itemizing, code);
                        if (j == -2) {
-@@ -1493,10 +1508,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1496,10 +1511,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                 * readable and writable permissions during the time we are
                 * putting files within them.  This is then restored to the
                 * former permissions after the transfer is done. */
@@ -269,7 +269,7 @@ diff --git a/generator.c b/generator.c
                                rsyserr(FERROR_XFER, errno,
                                        "failed to modify permissions on %s",
                                        full_fname(fname));
-@@ -1531,6 +1551,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1534,6 +1554,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                int exists = statret == 0 && stype != FT_DIR;
                file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, exists);
        }
@@ -280,7 +280,7 @@ diff --git a/generator.c b/generator.c
  
  #ifdef SUPPORT_HARD_LINKS
        if (preserve_hard_links && F_HLINK_NOT_FIRST(file)
-@@ -2104,17 +2128,25 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2107,17 +2131,25 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
                        continue;
                fname = f_name(file, NULL);
                if (fix_dir_perms)
@@ -470,7 +470,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --max-delete=NUM         don't delete more than NUM files
  --max-size=SIZE          don't transfer any file larger than SIZE
  --min-size=SIZE          don't transfer any file smaller than SIZE
-@@ -792,6 +796,7 @@ expand it.
+@@ -795,6 +799,7 @@ expand it.
      recursion and want to preserve almost everything.  Be aware that it does
      **not** include preserving ACLs (`-A`), xattrs (`-X`), atimes (`-U`),
      crtimes (`-N`), nor the finding and preserving of hardlinks (`-H`).
@@ -478,7 +478,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  
      The only exception to the above equivalence is when [`--files-from`](#opt)
      is specified, in which case [`-r`](#opt) is not implied.
-@@ -1251,7 +1256,7 @@ expand it.
+@@ -1254,7 +1259,7 @@ expand it.
      Without this option, if the sending side has replaced a directory with a
      symlink to a directory, the receiving side will delete anything that is in
      the way of the new symlink, including a directory hierarchy (as long as
@@ -487,7 +487,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  
      See also [`--keep-dirlinks`](#opt) for an analogous option for the
      receiving side.
-@@ -1446,6 +1451,37 @@ expand it.
+@@ -1449,6 +1454,37 @@ expand it.
      those used by [`--fake-super`](#opt)) unless you repeat the option (e.g. `-XX`).
      This "copy all xattrs" mode cannot be used with [`--fake-super`](#opt).
  
@@ -525,7 +525,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  0.  `--chmod=CHMOD`
  
      This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1963,8 +1999,8 @@ expand it.
+@@ -1969,8 +2005,8 @@ expand it.
      [`--ignore-missing-args`](#opt) option a step farther: each missing arg
      will become a deletion request of the corresponding destination file on the
      receiving side (should it exist).  If the destination file is a non-empty
@@ -536,7 +536,7 @@ diff --git a/rsync.1.md b/rsync.1.md
      independent of any other type of delete processing.
  
      The missing source files are represented by special file-list entries which
-@@ -1975,14 +2011,14 @@ expand it.
+@@ -1981,14 +2017,14 @@ expand it.
      Tells [`--delete`](#opt) to go ahead and delete files even when there are
      I/O errors.
  
@@ -554,7 +554,7 @@ diff --git a/rsync.1.md b/rsync.1.md
      [`--recursive`](#opt) option was also enabled.
  
  0.  `--max-delete=NUM`
-@@ -3040,7 +3076,7 @@ expand it.
+@@ -3046,7 +3082,7 @@ expand it.
      also turns on the output of other verbose messages).
  
      The "%i" escape has a cryptic output that is 11 letters long.  The general
@@ -740,8 +740,8 @@ diff --git a/rsync.h b/rsync.h
 +extern int fileflags_ndx;
  extern int acls_ndx;
  extern int xattrs_ndx;
-@@ -878,6 +906,11 @@ extern int xattrs_ndx;
+ extern int file_sum_extra_cnt;
+@@ -879,6 +907,11 @@ extern int file_sum_extra_cnt;
  /* When the associated option is on, all entries will have these present: */
  #define F_OWNER(f) REQ_EXTRA(f, uid_ndx)->unum
  #define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum
@@ -998,7 +998,7 @@ diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns
 diff --git a/usage.c b/usage.c
 --- a/usage.c
 +++ b/usage.c
-@@ -137,6 +137,11 @@ static void print_info_flags(enum logcode f)
+@@ -138,6 +138,11 @@ static void print_info_flags(enum logcode f)
  #endif
                        "crtimes",
  
@@ -1091,7 +1091,7 @@ diff --git a/util1.c b/util1.c
 diff --git a/xattrs.c b/xattrs.c
 --- a/xattrs.c
 +++ b/xattrs.c
-@@ -1091,7 +1091,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna
+@@ -1086,7 +1086,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna
         && !S_ISLNK(sxp->st.st_mode)
  #endif
         && access(fname, W_OK) < 0
@@ -1100,7 +1100,7 @@ diff --git a/xattrs.c b/xattrs.c
                added_write_perm = 1;
  
        ndx = F_XATTR(file);
-@@ -1099,7 +1099,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna
+@@ -1094,7 +1094,7 @@ int set_xattr(const char *fname, const struct file_struct *file, const char *fna
        lst = &glst->xa_items;
        int return_value = rsync_xal_set(fname, lst, fnamecmp, sxp);
        if (added_write_perm) /* remove the temporary write permission */
@@ -1109,7 +1109,7 @@ diff --git a/xattrs.c b/xattrs.c
        return return_value;
  }
  
-@@ -1216,7 +1216,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
+@@ -1211,7 +1211,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
        mode = (fst.st_mode & _S_IFMT) | (fmode & ACCESSPERMS)
             | (S_ISDIR(fst.st_mode) ? 0700 : 0600);
        if (fst.st_mode != mode)