-@@ -607,6 +628,8 @@ static struct file_struct *receive_file_
- file->mode = mode;
- file->uid = uid;
- file->gid = gid;
-+ if (preserve_atimes)
-+ file->atime = atime;
-
- if (dirname_len) {
- file->dirname = lastdir = bp;
-@@ -632,12 +655,12 @@ static struct file_struct *receive_file_
- && lastname[del_hier_name_len-1] == '.'
- && lastname[del_hier_name_len-2] == '/')
- del_hier_name_len -= 2;
-- file->flags |= FLAG_TOP_DIR | FLAG_DEL_HERE;
-+ FFLAGS(file) |= FLAG_TOP_DIR | FLAG_DEL_HERE;
- } else if (in_del_hier) {
- if (!relative_paths || !del_hier_name_len
- || (l1 >= del_hier_name_len
- && lastname[del_hier_name_len] == '/'))
-- file->flags |= FLAG_DEL_HERE;
-+ FFLAGS(file) |= FLAG_DEL_HERE;
- else
- in_del_hier = 0;
- }
-@@ -851,12 +874,14 @@ struct file_struct *make_file(char *fnam
- memset(bp, 0, file_struct_len);
- bp += file_struct_len;
-
-- file->flags = flags;
-+ FFLAGS(file) = flags;
- file->modtime = st.st_mtime;
- file->length = st.st_size;
- file->mode = st.st_mode;
- file->uid = st.st_uid;
- file->gid = st.st_gid;
-+ if (preserve_atimes)
-+ file->atime = st.st_atime;
-
- #ifdef SUPPORT_HARD_LINKS
- if (flist && flist->hlink_pool) {
-@@ -969,7 +994,7 @@ static void send_if_directory(int f, str
- char is_dot_dir = fbuf[ol-1] == '.' && (ol == 1 || fbuf[ol-2] == '/');
-
- if (S_ISDIR(file->mode)
-- && !(file->flags & FLAG_MOUNT_POINT) && f_name(file, fbuf)) {
-+ && !(FFLAGS(file) & FLAG_MOUNT_POINT) && f_name(file, fbuf)) {
- void *save_filters;
- unsigned int len = strlen(fbuf);
- if (len > 1 && fbuf[len-1] == '/')
-@@ -1581,8 +1606,9 @@ static void clean_flist(struct file_list
- }
- /* Make sure we don't lose track of a user-specified
- * top directory. */
-- flist->files[keep]->flags |= flist->files[drop]->flags
-- & (FLAG_TOP_DIR|FLAG_DEL_HERE);
-+ FFLAGS(flist->files[keep])
-+ |= FFLAGS(flist->files[drop])
-+ & (FLAG_TOP_DIR|FLAG_DEL_HERE);
-
- clear_file(flist->files[drop], flist);
-
-@@ -1706,7 +1732,7 @@ static void output_flist(struct file_lis
- file->dirname ? file->dirname : "",
- file->dirname ? "/" : "", NS(file->basename),
- S_ISDIR(file->mode) ? "/" : "", (int)file->mode,
-- (double)file->length, uidbuf, gidbuf, file->flags);
-+ (double)file->length, uidbuf, gidbuf, FFLAGS(file));