copy: adjust directory times after writing to the directory

When recursively copying a directory tree, fix up the file times after having
created all contents in it, so that our changes don't end up altering any of
the directory times.
This commit is contained in:
Lennart Poettering 2016-04-29 19:44:59 +02:00
parent b498c53d80
commit 3b8483c0a3
1 changed files with 16 additions and 17 deletions

View File

@ -327,22 +327,6 @@ static int fd_copy_directory(
r = 0;
if (created) {
struct timespec ut[2] = {
st->st_atim,
st->st_mtim
};
if (fchown(fdt, st->st_uid, st->st_gid) < 0)
r = -errno;
if (fchmod(fdt, st->st_mode & 07777) < 0)
r = -errno;
(void) futimens(fdt, ut);
(void) copy_xattr(dirfd(d), fdt);
}
FOREACH_DIRENT_ALL(de, d, return -errno) {
struct stat buf;
int q;
@ -378,6 +362,22 @@ static int fd_copy_directory(
r = q;
}
if (created) {
struct timespec ut[2] = {
st->st_atim,
st->st_mtim
};
if (fchown(fdt, st->st_uid, st->st_gid) < 0)
r = -errno;
if (fchmod(fdt, st->st_mode & 07777) < 0)
r = -errno;
(void) copy_xattr(dirfd(d), fdt);
(void) futimens(fdt, ut);
}
return r;
}
@ -409,7 +409,6 @@ int copy_tree(const char *from, const char *to, bool merge) {
}
int copy_directory_fd(int dirfd, const char *to, bool merge) {
struct stat st;
assert(dirfd >= 0);