diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-04-04 21:35:35 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-04-04 21:35:35 +0200 |
commit | 98445ec1f011601cfe650ef9a36bdada6cb058cb (patch) | |
tree | 9ad937b1a902e895da201511741eea8a0cda9b7c /src/lib/copy_file_recursive.c | |
parent | 5b5056f681b1d70ebc0ed613e56c1c3820b55fc4 (diff) | |
download | abrt-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.c | 10 |
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; } |