mirror of
https://github.com/systemd/systemd.git
synced 2025-03-31 14:50:15 +03:00
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:
parent
b498c53d80
commit
3b8483c0a3
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user