mirror of
https://github.com/systemd/systemd.git
synced 2025-09-15 13:44:41 +03:00
copy: also attempt to copy atime/mtime when copying symlinks, device nodes, fifos
This commit is contained in:
@@ -391,9 +391,10 @@ static int fd_copy_symlink(
|
|||||||
uid_is_valid(override_uid) ? override_uid : st->st_uid,
|
uid_is_valid(override_uid) ? override_uid : st->st_uid,
|
||||||
gid_is_valid(override_gid) ? override_gid : st->st_gid,
|
gid_is_valid(override_gid) ? override_gid : st->st_gid,
|
||||||
AT_SYMLINK_NOFOLLOW) < 0)
|
AT_SYMLINK_NOFOLLOW) < 0)
|
||||||
return -errno;
|
r = -errno;
|
||||||
|
|
||||||
return 0;
|
(void) utimensat(dt, to, (struct timespec[]) { st->st_atim, st->st_mtim }, AT_SYMLINK_NOFOLLOW);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Encapsulates the database we store potential hardlink targets in */
|
/* Encapsulates the database we store potential hardlink targets in */
|
||||||
@@ -693,6 +694,8 @@ static int fd_copy_fifo(
|
|||||||
if (fchmodat(dt, to, st->st_mode & 07777, 0) < 0)
|
if (fchmodat(dt, to, st->st_mode & 07777, 0) < 0)
|
||||||
r = -errno;
|
r = -errno;
|
||||||
|
|
||||||
|
(void) utimensat(dt, to, (struct timespec[]) { st->st_atim, st->st_mtim }, AT_SYMLINK_NOFOLLOW);
|
||||||
|
|
||||||
(void) memorize_hardlink(hardlink_context, st, dt, to);
|
(void) memorize_hardlink(hardlink_context, st, dt, to);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@@ -739,6 +742,8 @@ static int fd_copy_node(
|
|||||||
if (fchmodat(dt, to, st->st_mode & 07777, 0) < 0)
|
if (fchmodat(dt, to, st->st_mode & 07777, 0) < 0)
|
||||||
r = -errno;
|
r = -errno;
|
||||||
|
|
||||||
|
(void) utimensat(dt, to, (struct timespec[]) { st->st_atim, st->st_mtim }, AT_SYMLINK_NOFOLLOW);
|
||||||
|
|
||||||
(void) memorize_hardlink(hardlink_context, st, dt, to);
|
(void) memorize_hardlink(hardlink_context, st, dt, to);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user