summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/copy_file_recursive.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/copy_file_recursive.c b/src/lib/copy_file_recursive.c
index c3f021c7..48108a1d 100644
--- a/src/lib/copy_file_recursive.c
+++ b/src/lib/copy_file_recursive.c
@@ -126,6 +126,16 @@ int copy_file_recursive(const char *source, const char *dest)
if (close(dst_fd) < 0) {
perror_msg("Error writing to '%s'", dest);
retval = -1;
+ } else {
+ /* (Try to) copy atime and mtime */
+ struct timeval atime_mtime[2];
+ atime_mtime[0].tv_sec = source_stat.st_atime;
+ // note: if "st_atim.tv_nsec" doesn't compile, try "st_atimensec":
+ atime_mtime[0].tv_usec = source_stat.st_atim.tv_nsec / 1000;
+ atime_mtime[1].tv_sec = source_stat.st_mtime;
+ atime_mtime[1].tv_usec = source_stat.st_mtim.tv_nsec / 1000;
+ // note: can use utimensat when it is more widely supported:
+ utimes(dest, atime_mtime);
}
goto ret;
}