summaryrefslogtreecommitdiffstats
path: root/src/lib/copy_file_recursive.c
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-04-04 21:35:35 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2011-04-04 21:35:35 +0200
commit98445ec1f011601cfe650ef9a36bdada6cb058cb (patch)
tree9ad937b1a902e895da201511741eea8a0cda9b7c /src/lib/copy_file_recursive.c
parent5b5056f681b1d70ebc0ed613e56c1c3820b55fc4 (diff)
downloadabrt-98445ec1f011601cfe650ef9a36bdada6cb058cb.tar.gz
abrt-98445ec1f011601cfe650ef9a36bdada6cb058cb.tar.xz
abrt-98445ec1f011601cfe650ef9a36bdada6cb058cb.zip
dump dir stealing: try to preserve atime/mtime. closes bz#692688
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/lib/copy_file_recursive.c')
-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;
}