- if (preserve_uid && !(flags & XMIT_SAME_UID))
- uid = (uid_t)read_int(f);
-@@ -638,6 +651,7 @@ void receive_file_entry(struct file_stru
-
- file->flags = flags & XMIT_TOP_DIR ? FLAG_TOP_DIR : 0;
- file->modtime = modtime;
-+ file->atime = atime;
- file->length = file_length;
- file->mode = mode;
- file->uid = uid;
-@@ -852,6 +866,7 @@ skip_excludes:
-
- file->flags = flags;
- file->modtime = st.st_mtime;
-+ file->atime = st.st_atime;
- file->length = st.st_size;
- file->mode = st.st_mode;
- file->uid = st.st_uid;
---- generator.c 15 Apr 2004 16:55:23 -0000 1.79
-+++ generator.c 20 Apr 2004 23:44:17 -0000
-@@ -97,7 +97,7 @@ static int skip_file(char *fname, struct
- return 0;
- }
-
-- return (cmp_modtime(st->st_mtime,file->modtime) == 0);
-+ return cmp_time(st->st_mtime,file->modtime) == 0;
- }
-
-
-@@ -464,7 +464,7 @@ void recv_generator(char *fname, struct
- return;
- }
-
-- if (update_only && cmp_modtime(st.st_mtime,file->modtime)>0 && fnamecmp == fname) {
-+ if (update_only && cmp_time(st.st_mtime,file->modtime)>0 && fnamecmp == fname) {
- if (verbose > 1)
- rprintf(FINFO,"%s is newer\n",fname);
- return;
---- options.c 17 Apr 2004 17:07:23 -0000 1.147
-+++ options.c 20 Apr 2004 23:44:17 -0000
-@@ -46,6 +46,7 @@ int preserve_devices = 0;
- int preserve_uid = 0;
+ if (chmod_modes && !S_ISLNK(mode))
+ mode = tweak_mode(mode, chmod_modes);
+@@ -700,6 +716,8 @@ static struct file_struct *recv_file_ent
+ F_UID(file) = uid;
+ if (preserve_gid)
+ F_GID(file) = gid;
++ if (preserve_atimes)
++ F_ATIME(file) = atime;
+
+ if (dirname_len) {
+ file->dirname = lastdir = bp;
+@@ -1002,6 +1020,8 @@ struct file_struct *make_file(const char
+ F_UID(file) = st.st_uid;
+ if (preserve_gid)
+ F_GID(file) = st.st_gid;
++ if (preserve_atimes)
++ F_ATIME(file) = st.st_atime;
+
+ if (dirname_len) {
+ file->dirname = lastdir = bp;
+--- old/generator.c
++++ new/generator.c
+@@ -43,6 +43,7 @@ extern int preserve_perms;
+ extern int preserve_uid;
+ extern int preserve_gid;
+ extern int preserve_times;
++extern int preserve_atimes;
+ extern int omit_dir_times;
+ extern int delete_mode;
+ extern int delete_before;
+@@ -547,6 +548,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;
++ if (preserve_atimes && !S_ISDIR(file->mode) && !S_ISLNK(file->mode)
++ && cmp_time(F_ATIME(file), st->st_atime) != 0)
++ iflags |= ITEM_REPORT_ATIME;
+ if (!BITS_EQUAL(st->st_mode, file->mode, CHMOD_BITS))
+ iflags |= ITEM_REPORT_PERMS;
+ if (preserve_uid && am_root && F_UID(file) != st->st_uid)
+@@ -858,6 +862,8 @@ static int try_dests_reg(struct file_str
+ if (link_dest) {
+ if (!hard_link_one(file, fname, cmpbuf, 1))
+ goto try_a_copy;
++ if (preserve_atimes)
++ set_file_attrs(fname, file, stp, 0);
+ if (preserve_hard_links && F_IS_HLINKED(file))
+ finish_hard_link(file, fname, stp, itemizing, code, j);
+ if (itemizing && (verbose > 1 || stdout_format_has_i > 1)) {
+--- old/log.c
++++ new/log.c
+@@ -37,6 +37,7 @@ extern int msg_fd_out;
+ extern int allow_8bit_chars;
+ extern int protocol_version;
+ extern int preserve_times;
++extern int preserve_atimes;
+ extern int preserve_uid;
+ extern int preserve_gid;
+ 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';
+- c[8] = '.';
++ c[8] = !(iflags & ITEM_REPORT_ATIME) ? '.'
++ : S_ISLNK(file->mode) ? 'U' : 'u';
+ c[9] = '\0';
+
+ if (iflags & (ITEM_IS_NEW|ITEM_MISSING_DATA)) {
+--- old/options.c
++++ new/options.c
+@@ -55,6 +55,7 @@ int preserve_uid = 0;