The patches for 3.0.0pre6.
[rsync/rsync-patches.git] / atimes.diff
index 9e811d9..353a9e3 100644 (file)
@@ -7,8 +7,9 @@ To use this patch, run these commands for a successful build:
 
 TODO:  need to fix this to handle 64-bit time_t values!
 
---- old/compat.c
-+++ new/compat.c
+diff --git a/compat.c b/compat.c
+--- a/compat.c
++++ b/compat.c
 @@ -44,6 +44,7 @@ extern int protocol_version;
  extern int protect_args;
  extern int preserve_uid;
@@ -35,8 +36,9 @@ TODO:  need to fix this to handle 64-bit time_t values!
        if (preserve_acls && !am_sender)
                acls_ndx = ++file_extra_cnt;
        if (preserve_xattrs)
---- old/flist.c
-+++ new/flist.c
+diff --git a/flist.c b/flist.c
+--- a/flist.c
++++ b/flist.c
 @@ -53,6 +53,7 @@ extern int preserve_specials;
  extern int uid_ndx;
  extern int gid_ndx;
@@ -45,7 +47,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  extern int relative_paths;
  extern int implied_dirs;
  extern int file_extra_cnt;
-@@ -338,6 +339,7 @@ int push_pathname(const char *dir, int l
+@@ -344,6 +345,7 @@ int push_pathname(const char *dir, int len)
  static void send_file_entry(int f, struct file_struct *file, int ndx, int first_ndx)
  {
        static time_t modtime;
@@ -53,7 +55,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
        static mode_t mode;
  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
-@@ -444,6 +446,13 @@ static void send_file_entry(int f, struc
+@@ -450,6 +452,13 @@ static void send_file_entry(int f, struct file_struct *file, int ndx, int first_
                xflags |= XMIT_SAME_TIME;
        else
                modtime = file->modtime;
@@ -67,7 +69,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  
  #ifdef SUPPORT_HARD_LINKS
        if (tmp_dev != 0) {
-@@ -517,6 +526,8 @@ static void send_file_entry(int f, struc
+@@ -523,6 +532,8 @@ static void send_file_entry(int f, struct file_struct *file, int ndx, int first_
        }
        if (!(xflags & XMIT_SAME_MODE))
                write_int(f, to_wire_mode(mode));
@@ -76,7 +78,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
        if (uid_ndx && !(xflags & XMIT_SAME_UID)) {
                if (protocol_version < 30)
                        write_int(f, uid);
-@@ -603,7 +614,7 @@ static void send_file_entry(int f, struc
+@@ -609,7 +620,7 @@ static void send_file_entry(int f, struct file_struct *file, int ndx, int first_
  static struct file_struct *recv_file_entry(struct file_list *flist,
                                           int xflags, int f)
  {
@@ -85,7 +87,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
        static mode_t mode;
  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
-@@ -736,6 +747,16 @@ static struct file_struct *recv_file_ent
+@@ -742,6 +753,16 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
        }
        if (!(xflags & XMIT_SAME_MODE))
                mode = from_wire_mode(read_int(f));
@@ -93,7 +95,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
 +              atime = read_varlong(f, 4);
 +#if SIZEOF_TIME_T < SIZEOF_INT64
 +              if ((atime > INT_MAX || atime < INT_MIN) && !am_generator) {
-+                      rprintf(FERROR,
++                      rprintf(FERROR_XFER,
 +                              "Access time value of %s truncated on receiver.\n",
 +                              lastname);
 +              }
@@ -102,7 +104,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  
        if (chmod_modes && !S_ISLNK(mode))
                mode = tweak_mode(mode, chmod_modes);
-@@ -864,6 +885,8 @@ static struct file_struct *recv_file_ent
+@@ -872,6 +893,8 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
                F_GROUP(file) = gid;
                file->flags |= gid_flags;
        }
@@ -111,7 +113,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
        if (unsort_ndx)
                F_NDX(file) = flist->used + flist->ndx_start;
  
-@@ -1186,6 +1209,8 @@ struct file_struct *make_file(const char
+@@ -1200,6 +1223,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
                F_OWNER(file) = st.st_uid;
        if (gid_ndx)
                F_GROUP(file) = st.st_gid;
@@ -120,8 +122,9 @@ TODO:  need to fix this to handle 64-bit time_t values!
  
        if (basename != thisname)
                file->dirname = lastdir;
---- old/generator.c
-+++ new/generator.c
+diff --git a/generator.c b/generator.c
+--- a/generator.c
++++ b/generator.c
 @@ -43,6 +43,7 @@ extern int preserve_specials;
  extern int preserve_hard_links;
  extern int preserve_perms;
@@ -130,7 +133,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  extern int uid_ndx;
  extern int gid_ndx;
  extern int delete_mode;
-@@ -568,6 +569,9 @@ void itemize(const char *fnamecmp, struc
+@@ -568,6 +569,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
                  && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
                 || (keep_time && cmp_time(file->modtime, sxp->st.st_mtime) != 0))
                        iflags |= ITEM_REPORT_TIME;
@@ -140,7 +143,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  #if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST
                if (S_ISLNK(file->mode)) {
                        ;
-@@ -923,6 +927,8 @@ static int try_dests_reg(struct file_str
+@@ -923,6 +927,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
                if (link_dest) {
                        if (!hard_link_one(file, fname, cmpbuf, 1))
                                goto try_a_copy;
@@ -149,7 +152,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
                        if (preserve_hard_links && F_IS_HLINKED(file))
                                finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, j);
                        if (itemizing && (verbose > 1 || stdout_format_has_i > 1)) {
-@@ -1113,6 +1119,7 @@ static int try_dests_non(struct file_str
+@@ -1113,6 +1119,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
  static void list_file_entry(struct file_struct *f)
  {
        char permbuf[PERMSTRING_SIZE];
@@ -157,7 +160,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
        double len;
  
        if (!F_IS_ACTIVE(f)) {
-@@ -1127,14 +1134,16 @@ static void list_file_entry(struct file_
+@@ -1127,14 +1134,16 @@ static void list_file_entry(struct file_struct *f)
  
  #ifdef SUPPORT_LINKS
        if (preserve_links && S_ISLNK(f->mode)) {
@@ -176,7 +179,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
                        f_name(f, NULL));
        }
  }
-@@ -1884,7 +1893,7 @@ static void touch_up_dirs(struct file_li
+@@ -1884,7 +1893,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
                if (!(file->mode & S_IWUSR))
                        do_chmod(fname, file->mode);
                if (need_retouch_dir_times)
@@ -185,9 +188,10 @@ TODO:  need to fix this to handle 64-bit time_t values!
                if (allowed_lull && !(counter % lull_mod))
                        maybe_send_keepalive();
                else if (!(counter & 0xFF))
---- old/log.c
-+++ new/log.c
-@@ -631,7 +631,8 @@ static void log_formatted(enum logcode c
+diff --git a/log.c b/log.c
+--- a/log.c
++++ b/log.c
+@@ -642,7 +642,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
                        c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p';
                        c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o';
                        c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';
@@ -197,8 +201,9 @@ TODO:  need to fix this to handle 64-bit time_t values!
                        c[9] = !(iflags & ITEM_REPORT_ACL) ? '.' : 'a';
                        c[10] = !(iflags & ITEM_REPORT_XATTR) ? '.' : 'x';
                        c[11] = '\0';
---- old/options.c
-+++ new/options.c
+diff --git a/options.c b/options.c
+--- a/options.c
++++ b/options.c
 @@ -57,6 +57,7 @@ int preserve_specials = 0;
  int preserve_uid = 0;
  int preserve_gid = 0;
@@ -207,7 +212,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  int update_only = 0;
  int cvs_exclude = 0;
  int dry_run = 0;
-@@ -346,6 +347,7 @@ void usage(enum logcode F)
+@@ -347,6 +348,7 @@ void usage(enum logcode F)
    rprintf(F," -D                          same as --devices --specials\n");
    rprintf(F," -t, --times                 preserve modification times\n");
    rprintf(F," -O, --omit-dir-times        omit directories from --times\n");
@@ -215,7 +220,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
    rprintf(F,"     --super                 receiver attempts super-user activities\n");
  #ifdef SUPPORT_XATTRS
    rprintf(F,"     --fake-super            store/recover privileged attrs using xattrs\n");
-@@ -480,6 +482,9 @@ static struct poptOption long_options[] 
+@@ -482,6 +484,9 @@ static struct poptOption long_options[] = {
    {"times",           't', POPT_ARG_VAL,    &preserve_times, 2, 0, 0 },
    {"no-times",         0,  POPT_ARG_VAL,    &preserve_times, 0, 0, 0 },
    {"no-t",             0,  POPT_ARG_VAL,    &preserve_times, 0, 0, 0 },
@@ -225,7 +230,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
    {"omit-dir-times",  'O', POPT_ARG_VAL,    &omit_dir_times, 1, 0, 0 },
    {"no-omit-dir-times",0,  POPT_ARG_VAL,    &omit_dir_times, 0, 0, 0 },
    {"no-O",             0,  POPT_ARG_VAL,    &omit_dir_times, 0, 0, 0 },
-@@ -1713,6 +1718,8 @@ void server_options(char **args, int *ar
+@@ -1716,6 +1721,8 @@ void server_options(char **args, int *argc_p)
                argstr[x++] = 'D';
        if (preserve_times)
                argstr[x++] = 't';
@@ -234,8 +239,9 @@ TODO:  need to fix this to handle 64-bit time_t values!
        if (preserve_perms)
                argstr[x++] = 'p';
        else if (preserve_executability && am_sender)
---- old/rsync.c
-+++ new/rsync.c
+diff --git a/rsync.c b/rsync.c
+--- a/rsync.c
++++ b/rsync.c
 @@ -33,6 +33,7 @@ extern int preserve_acls;
  extern int preserve_xattrs;
  extern int preserve_perms;
@@ -244,7 +250,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  extern int preserve_times;
  extern int am_root;
  extern int am_server;
-@@ -343,6 +344,7 @@ int set_file_attrs(const char *fname, st
+@@ -343,6 +344,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
        int updated = 0;
        stat_x sx2;
        int change_uid, change_gid;
@@ -252,8 +258,8 @@ TODO:  need to fix this to handle 64-bit time_t values!
        mode_t new_mode = file->mode;
        int inherit;
  
-@@ -383,18 +385,36 @@ int set_file_attrs(const char *fname, st
-               set_stat_xattr(fname, file);
+@@ -386,18 +388,36 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+               set_xattr(fname, file, fnamecmp, sxp);
  #endif
  
 +      /* This code must be the first update in the function due to
@@ -281,7 +287,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
 +      if (updated) {
 +              int ret = set_times(fname, mtime, atime, sxp->st.st_mode);
                if (ret < 0) {
-                       rsyserr(FERROR, errno, "failed to set times on %s",
+                       rsyserr(FERROR_XFER, errno, "failed to set times on %s",
                                full_fname(fname));
                        goto cleanup;
                }
@@ -292,9 +298,10 @@ TODO:  need to fix this to handle 64-bit time_t values!
        }
  
        change_uid = am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file);
---- old/rsync.h
-+++ new/rsync.h
-@@ -57,6 +57,7 @@
+diff --git a/rsync.h b/rsync.h
+--- a/rsync.h
++++ b/rsync.h
+@@ -60,6 +60,7 @@
  #define XMIT_RDEV_MINOR_8_pre30 (1<<11)       /* protocols 28 - 29  */
  #define XMIT_GROUP_NAME_FOLLOWS (1<<11) /* protocols 30 - now */
  #define XMIT_HLINK_FIRST (1<<12)      /* protocols 30 - now (HLINKED files only) */
@@ -302,7 +309,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  
  /* These flags are used in the live flist data. */
  
-@@ -145,6 +146,7 @@
+@@ -148,6 +149,7 @@
  
  #define ATTRS_REPORT          (1<<0)
  #define ATTRS_SKIP_MTIME      (1<<1)
@@ -310,7 +317,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  
  #define FULL_FLUSH    1
  #define NORMAL_FLUSH  0
-@@ -608,6 +610,7 @@ extern int file_extra_cnt;
+@@ -618,6 +620,7 @@ extern int file_extra_cnt;
  extern int inc_recurse;
  extern int uid_ndx;
  extern int gid_ndx;
@@ -318,7 +325,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  extern int acls_ndx;
  extern int xattrs_ndx;
  
-@@ -645,6 +648,7 @@ extern int xattrs_ndx;
+@@ -655,6 +658,7 @@ extern int xattrs_ndx;
  /* 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
@@ -326,9 +333,10 @@ TODO:  need to fix this to handle 64-bit time_t values!
  #define F_ACL(f) REQ_EXTRA(f, acls_ndx)->num
  #define F_XATTR(f) REQ_EXTRA(f, xattrs_ndx)->num
  #define F_NDX(f) REQ_EXTRA(f, unsort_ndx)->num
---- old/rsync.yo
-+++ new/rsync.yo
-@@ -349,6 +349,7 @@ to the detailed description below for a 
+diff --git a/rsync.yo b/rsync.yo
+--- a/rsync.yo
++++ b/rsync.yo
+@@ -349,6 +349,7 @@ to the detailed description below for a complete description.  verb(
   -D                          same as --devices --specials
   -t, --times                 preserve modification times
   -O, --omit-dir-times        omit directories from --times
@@ -336,7 +344,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
       --super                 receiver attempts super-user activities
       --fake-super            store/recover privileged attrs using xattrs
   -S, --sparse                handle sparse files efficiently
-@@ -973,6 +974,12 @@ it is preserving modification times (see
+@@ -974,6 +975,12 @@ it is preserving modification times (see bf(--times)).  If NFS is sharing
  the directories on the receiving side, it is a good idea to use bf(-O).
  This option is inferred if you use bf(--backup) without bf(--backup-dir).
  
@@ -349,7 +357,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  dit(bf(--super)) This tells the receiving side to attempt super-user
  activities even if the receiving rsync wasn't run by the super-user.  These
  activities include: preserving users via the bf(--owner) option, preserving
-@@ -1654,8 +1661,10 @@ quote(itemization(
+@@ -1671,8 +1678,10 @@ quote(itemization(
    sender's value (requires bf(--owner) and super-user privileges).
    it() A bf(g) means the group is different and is being updated to the
    sender's value (requires bf(--group) and the authority to set the group).
@@ -362,8 +370,9 @@ TODO:  need to fix this to handle 64-bit time_t values!
    it() The bf(a) means that the ACL information changed.
    it() The bf(x) slot is reserved for reporting extended attribute changes
    (a feature that is not yet released).
---- old/sender.c
-+++ new/sender.c
+diff --git a/sender.c b/sender.c
+--- a/sender.c
++++ b/sender.c
 @@ -43,6 +43,7 @@ extern int do_progress;
  extern int inplace;
  extern int batch_fd;
@@ -372,8 +381,10 @@ TODO:  need to fix this to handle 64-bit time_t values!
  extern struct stats stats;
  extern struct file_list *cur_flist, *first_flist, *dir_flist;
  
---- old/testsuite/atimes.test
-+++ new/testsuite/atimes.test
+diff --git a/testsuite/atimes.test b/testsuite/atimes.test
+new file mode 100644
+--- /dev/null
++++ b/testsuite/atimes.test
 @@ -0,0 +1,19 @@
 +#! /bin/sh
 +
@@ -394,8 +405,9 @@ TODO:  need to fix this to handle 64-bit time_t values!
 +
 +# The script would have aborted on error, so getting here means we've won.
 +exit 0
---- old/testsuite/rsync.fns
-+++ new/testsuite/rsync.fns
+diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns
+--- a/testsuite/rsync.fns
++++ b/testsuite/rsync.fns
 @@ -187,6 +187,10 @@ checkit() {
      # We can just write everything to stdout/stderr, because the
      # wrapper hides it unless there is a problem.
@@ -422,9 +434,10 @@ TODO:  need to fix this to handle 64-bit time_t values!
      ( cd "$3" && rsync_ls_lR . ) > "$tmpdir/ls-to"
      diff $diffopt "$tmpdir/ls-from" "$tmpdir/ls-to" || failed=YES
  
---- old/tls.c
-+++ new/tls.c
-@@ -104,6 +104,8 @@ static int stat_xattr(const char *fname,
+diff --git a/tls.c b/tls.c
+--- a/tls.c
++++ b/tls.c
+@@ -104,6 +104,8 @@ static int stat_xattr(const char *fname, STRUCT_STAT *fst)
  
  #endif
  
@@ -433,7 +446,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  static void failed(char const *what, char const *where)
  {
        fprintf(stderr, PROGRAM ": %s %s: %s\n",
-@@ -111,12 +113,29 @@ static void failed(char const *what, cha
+@@ -111,12 +113,29 @@ static void failed(char const *what, char const *where)
        exit(1);
  }
  
@@ -513,9 +526,10 @@ TODO:  need to fix this to handle 64-bit time_t values!
  #ifdef SUPPORT_XATTRS
    fprintf(F," -f, --fake-super            display attributes including fake-super xattrs\n");
  #endif
---- old/util.c
-+++ new/util.c
-@@ -122,7 +122,7 @@ NORETURN void overflow_exit(const char *
+diff --git a/util.c b/util.c
+--- a/util.c
++++ b/util.c
+@@ -122,7 +122,7 @@ NORETURN void overflow_exit(const char *str)
        exit_cleanup(RERR_MALLOC);
  }
  
@@ -524,7 +538,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
  {
  #if !defined HAVE_LUTIMES || !defined HAVE_UTIMES
        if (S_ISLNK(mode))
-@@ -130,9 +130,13 @@ int set_modtime(const char *fname, time_
+@@ -130,9 +130,13 @@ int set_modtime(const char *fname, time_t modtime, mode_t mode)
  #endif
  
        if (verbose > 2) {
@@ -540,7 +554,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
        }
  
        if (dry_run)
-@@ -141,7 +145,7 @@ int set_modtime(const char *fname, time_
+@@ -141,7 +145,7 @@ int set_modtime(const char *fname, time_t modtime, mode_t mode)
        {
  #ifdef HAVE_UTIMES
                struct timeval t[2];
@@ -549,7 +563,7 @@ TODO:  need to fix this to handle 64-bit time_t values!
                t[0].tv_usec = 0;
                t[1].tv_sec = modtime;
                t[1].tv_usec = 0;
-@@ -154,12 +158,12 @@ int set_modtime(const char *fname, time_
+@@ -154,12 +158,12 @@ int set_modtime(const char *fname, time_t modtime, mode_t mode)
                return utimes(fname, t);
  #elif defined HAVE_STRUCT_UTIMBUF
                struct utimbuf tbuf;