+@@ -771,6 +772,12 @@ it is preserving modification times (see
+ 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).
+
++dit(bf(-U, --atimes)) This tells rsync to set the access (use) times of the
++destination files to the same value as the source files. Note that the
++reading of the source file may update the atime of the source files, so
++repeated rsync runs with --atimes may be needed if you want to force the
++access-time values to be 100% identical on the two systems.
++
+ 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
+@@ -1278,8 +1285,8 @@ if the receiving rsync is at least versi
+ with older versions of rsync, but that also turns on the output of other
+ verbose messages).
+
+-The "%i" escape has a cryptic output that is 8 letters long. The general
+-format is like the string bf(YXcstpog), where bf(Y) is replaced by the
++The "%i" escape has a cryptic output that is 9 letters long. The general
++format is like the string bf(YXcstupog), where bf(Y) is replaced by the
+ kind of update being done, bf(X) is replaced by the file-type, and the
+ other letters represent attributes that may be output if they are being
+ modified.
+@@ -1319,9 +1326,13 @@ quote(itemize(
+ by the file transfer.
+ it() A bf(t) means the modification time is different and is being updated
+ to the sender's value (requires bf(--times)). An alternate value of bf(T)
+- means that the time will be set to the transfer time, which happens
++ means that the modify time will be set to the transfer time, which happens
+ anytime a symlink is transferred, or when a file or device is transferred
+ without bf(--times).
++ it() A bf(u) means the access (use) time is different and is being updated to
++ the sender's value (requires bf(--atimes)). An alternate value of bf(U)
++ means that the access time will be set to the transfer time, which happens
++ anytime a symlink is transferred.
+ it() A bf(p) means the permissions are different and are being updated to
+ the sender's value (requires bf(--perms)).
+ it() An bf(o) means the owner is different and is being updated to the
+--- orig/sender.c 2006-01-14 20:27:10
++++ sender.c 2006-01-24 18:10:23
+@@ -38,6 +38,7 @@ extern int do_progress;
+ extern int inplace;
+ extern int batch_fd;
+ extern int write_batch;
++extern unsigned int file_struct_len;
+ extern struct stats stats;
+ extern struct file_list *the_file_list;
+ extern char *log_format;
+@@ -126,7 +127,7 @@ void successful_send(int ndx)
+
+ file = the_file_list->files[ndx];
+ /* The generator might tell us about symlinks we didn't send. */
+- if (!(file->flags & FLAG_SENT) && !S_ISLNK(file->mode))
++ if (!(FFLAGS(file) & FLAG_SENT) && !S_ISLNK(file->mode))
+ return;
+ if (file->dir.root) {
+ offset = stringjoin(fname, sizeof fname,
+@@ -370,7 +371,7 @@ void send_files(struct file_list *flist,
+ rprintf(FINFO, "sender finished %s\n", fname);
+
+ /* Flag that we actually sent this entry. */
+- file->flags |= FLAG_SENT;
++ FFLAGS(file) |= FLAG_SENT;
+ }
+ make_backups = save_make_backups;
+
+--- orig/testsuite/atimes.test 2006-01-24 22:54:53
++++ testsuite/atimes.test 2006-01-24 22:54:53
+@@ -0,0 +1,19 @@
++#! /bin/sh
++
++# Test rsync copying atimes
++
++. "$suitedir/rsync.fns"
++
++set -x
++
++mkdir "$fromdir"
++
++touch "$fromdir/foo"
++touch -a -t 200102031717.42 "$fromdir/foo"
++
++TLS_ARGS=--atime
++
++checkit "$RSYNC -rtUgvvv \"$fromdir/\" \"$todir/\"" "$fromdir" "$todir"
++
++# The script would have aborted on error, so getting here means we've won.
++exit 0
+--- orig/testsuite/devices.test 2006-01-30 08:12:44
++++ testsuite/devices.test 2006-01-26 10:53:43
+@@ -42,14 +42,14 @@ touch -r "$fromdir/block" "$fromdir/bloc
+ $RSYNC -ai "$fromdir/block" "$todir/block2" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-cD++++++ block
++cD+++++++ block
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 1 failed"
+
+ $RSYNC -ai "$fromdir/block2" "$todir/block" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-cD++++++ block2
++cD+++++++ block2
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 2 failed"
+
+@@ -58,7 +58,7 @@ sleep 1
+ $RSYNC -Di "$fromdir/block3" "$todir/block" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-cD..T... block3
++cD..T.... block3
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 3 failed"
+
+@@ -66,15 +66,15 @@ $RSYNC -aiHvv "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ filter_outfile
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cD..t... block
+-cD...... block2
+-cD++++++ block3
+-hD++++++ block2.5 => block3
+-cD++++++ char
+-cD++++++ char2
+-cD++++++ char3
+-cS++++++ fifo
++.d..t.... ./
++cD..t.... block
++cD....... block2
++cD+++++++ block3
++hD+++++++ block2.5 => block3
++cD+++++++ char
++cD+++++++ char2
++cD+++++++ char3
++cS+++++++ fifo
+ EOT
+ if test ! -b "$fromdir/block2.5"; then
+ sed -e '/block2\.5/d' \
+--- orig/testsuite/itemize.test 2006-01-30 08:12:44
++++ testsuite/itemize.test 2006-01-24 22:32:03
+@@ -31,14 +31,14 @@ ln "$fromdir/foo/config1" "$fromdir/foo/
+ $RSYNC -iplr "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-cd++++++ bar/
+-cd++++++ bar/baz/
+->f++++++ bar/baz/rsync
+-cd++++++ foo/
+->f++++++ foo/config1
+->f++++++ foo/config2
+->f++++++ foo/extra
+-cL++++++ foo/sym -> ../bar/baz/rsync
++cd+++++++ bar/
++cd+++++++ bar/baz/
++>f+++++++ bar/baz/rsync
++cd+++++++ foo/
++>f+++++++ foo/config1
++>f+++++++ foo/config2
++>f+++++++ foo/extra
++cL+++++++ foo/sym -> ../bar/baz/rsync
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 1 failed"
+
+@@ -50,10 +50,10 @@ chmod 601 "$fromdir/foo/config2"
+ $RSYNC -iplrH "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+->f..T... bar/baz/rsync
+->f..T... foo/config1
+->f.sTp.. foo/config2
+-hf..T... foo/extra => foo/config1
++>f..T.... bar/baz/rsync
++>f..T.... foo/config1
++>f.sT.p.. foo/config2
++hf..T.... foo/extra => foo/config1
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 2 failed"
+
+@@ -70,11 +70,11 @@ chmod 777 "$todir/bar/baz/rsync"
+ $RSYNC -iplrtc "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-.f..tp.. bar/baz/rsync
+-.d..t... foo/
+-.f..t... foo/config1
+->fcstp.. foo/config2
+-cL..T... foo/sym -> ../bar/baz/rsync
++.f..t.p.. bar/baz/rsync
++.d..t.... foo/
++.f..t.... foo/config1
++>fcst.p.. foo/config2
++cL..T.... foo/sym -> ../bar/baz/rsync
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 3 failed"
+
+@@ -99,15 +99,15 @@ $RSYNC -ivvplrtH "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ filter_outfile
+ cat <<EOT >"$chkfile"
+-.d ./
+-.d bar/
+-.d bar/baz/
+-.f...p.. bar/baz/rsync
+-.d foo/
+-.f foo/config1
+->f..t... foo/config2
+-hf foo/extra
+-.L foo/sym -> ../bar/baz/rsync
++.d ./
++.d bar/
++.d bar/baz/
++.f....p.. bar/baz/rsync
++.d foo/
++.f foo/config1
++>f..t.... foo/config2
++hf foo/extra
++.L foo/sym -> ../bar/baz/rsync
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 5 failed"
+
+@@ -126,8 +126,8 @@ touch "$todir/foo/config2"
+ $RSYNC -iplrtH "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-.f...p.. foo/config1
+->f..t... foo/config2
++.f....p.. foo/config1
++>f..t.... foo/config2
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 7 failed"
+
+@@ -136,15 +136,15 @@ $RSYNC -ivvplrtH --copy-dest="$lddir" "$
+ | tee "$outfile"
+ filter_outfile
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cd++++++ bar/
+-cd++++++ bar/baz/
+-cf bar/baz/rsync
+-cd++++++ foo/
+-cf foo/config1
+-cf foo/config2
+-hf foo/extra => foo/config1
+-cL..T... foo/sym -> ../bar/baz/rsync
++.d..t.... ./
++cd+++++++ bar/
++cd+++++++ bar/baz/
++cf bar/baz/rsync
++cd+++++++ foo/
++cf foo/config1
++cf foo/config2
++hf foo/extra => foo/config1
++cL..T.... foo/sym -> ../bar/baz/rsync
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 8 failed"
+
+@@ -152,11 +152,11 @@ rm -rf "$todir"
+ $RSYNC -iplrtH --copy-dest="$lddir" "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cd++++++ bar/
+-cd++++++ bar/baz/
+-cd++++++ foo/
+-hf foo/extra => foo/config1
++.d..t.... ./
++cd+++++++ bar/
++cd+++++++ bar/baz/
++cd+++++++ foo/
++hf foo/extra => foo/config1
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 9 failed"
+
+@@ -183,15 +183,15 @@ $RSYNC -ivvplrtH --link-dest="$lddir" "$
+ | tee "$outfile"
+ filter_outfile
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cd++++++ bar/
+-cd++++++ bar/baz/
+-hf bar/baz/rsync
+-cd++++++ foo/
+-hf foo/config1
+-hf foo/config2
+-hf foo/extra => foo/config1
+-hL foo/sym -> ../bar/baz/rsync
++.d..t.... ./
++cd+++++++ bar/
++cd+++++++ bar/baz/
++hf bar/baz/rsync
++cd+++++++ foo/
++hf foo/config1
++hf foo/config2
++hf foo/extra => foo/config1
++hL foo/sym -> ../bar/baz/rsync
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 11 failed"
+
+@@ -199,10 +199,10 @@ rm -rf "$todir"
+ $RSYNC -iplrtH --link-dest="$lddir" "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cd++++++ bar/
+-cd++++++ bar/baz/
+-cd++++++ foo/
++.d..t.... ./
++cd+++++++ bar/
++cd+++++++ bar/baz/
++cd+++++++ foo/
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 12 failed"
+
+@@ -230,14 +230,14 @@ filter_outfile
+ # TODO fix really-old problem when combining -H with --compare-dest:
+ # missing output for foo/extra hard-link (and it might not be updated)!
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cd++++++ bar/
+-cd++++++ bar/baz/
+-.f bar/baz/rsync
+-cd++++++ foo/
+-.f foo/config1
+-.f foo/config2
+-.L foo/sym -> ../bar/baz/rsync
++.d..t.... ./
++cd+++++++ bar/
++cd+++++++ bar/baz/
++.f bar/baz/rsync
++cd+++++++ foo/
++.f foo/config1
++.f foo/config2
++.L foo/sym -> ../bar/baz/rsync
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 14 failed"
+
+@@ -245,10 +245,10 @@ rm -rf "$todir"
+ $RSYNC -iplrtH --compare-dest="$lddir" "$fromdir/" "$todir/" \
+ | tee "$outfile"
+ cat <<EOT >"$chkfile"
+-.d..t... ./
+-cd++++++ bar/
+-cd++++++ bar/baz/
+-cd++++++ foo/
++.d..t.... ./
++cd+++++++ bar/
++cd+++++++ bar/baz/
++cd+++++++ foo/
+ EOT
+ diff $diffopt "$chkfile" "$outfile" || test_fail "test 15 failed"
+
+--- orig/testsuite/rsync.fns 2006-01-30 08:12:44
++++ testsuite/rsync.fns 2005-07-28 00:41:20
+@@ -67,7 +67,7 @@ printmsg() {
+
+
+ rsync_ls_lR() {
+- find "$@" -print | sort | sed 's/ /\\ /g' | xargs "$TOOLDIR/tls"
++ find "$@" -print | sort | sed 's/ /\\ /g' | xargs "$TOOLDIR/tls" $TLS_ARGS
+ }
+
+ rsync_getgroups() {
+@@ -175,6 +175,10 @@ checkit() {
+ # We can just write everything to stdout/stderr, because the
+ # wrapper hides it unless there is a problem.
+
++ if test x$TLS_ARGS = x--atime; then
++ ( cd "$2" && rsync_ls_lR . ) > "$tmpdir/ls-from"
++ fi
++
+ echo "Running: \"$1\""
+ eval "$1"
+ status=$?
+@@ -182,10 +186,13 @@ checkit() {
+ failed="YES";
+ fi
+
++ if test x$TLS_ARGS != x--atime; then
++ ( cd "$2" && rsync_ls_lR . ) > "$tmpdir/ls-from"
++ fi