summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2015-01-24 13:50:13 +0000
committerjilles <jilles@FreeBSD.org>2015-01-24 13:50:13 +0000
commit3a9e3cd8d9759079220ebe0f13a1d1a8a458734e (patch)
tree2b470ac738f4b696f867cd706f33163b46c962c6 /bin
parentb126e557b253b006789504806612c8f6dc907bbe (diff)
downloadFreeBSD-src-3a9e3cd8d9759079220ebe0f13a1d1a8a458734e.zip
FreeBSD-src-3a9e3cd8d9759079220ebe0f13a1d1a8a458734e.tar.gz
cp,mv,touch: Set timestamps with nanosecond precision.
This uses utimensat().
Diffstat (limited to 'bin')
-rw-r--r--bin/cp/utils.c11
-rw-r--r--bin/mv/mv.c9
2 files changed, 10 insertions, 10 deletions
diff --git a/bin/cp/utils.c b/bin/cp/utils.c
index ad9695c..e77a6c1 100644
--- a/bin/cp/utils.c
+++ b/bin/cp/utils.c
@@ -330,7 +330,7 @@ copy_special(struct stat *from_stat, int exists)
int
setfile(struct stat *fs, int fd)
{
- static struct timeval tv[2];
+ static struct timespec tspec[2];
struct stat ts;
int rval, gotstat, islink, fdval;
@@ -340,10 +340,11 @@ setfile(struct stat *fs, int fd)
fs->st_mode &= S_ISUID | S_ISGID | S_ISVTX |
S_IRWXU | S_IRWXG | S_IRWXO;
- TIMESPEC_TO_TIMEVAL(&tv[0], &fs->st_atim);
- TIMESPEC_TO_TIMEVAL(&tv[1], &fs->st_mtim);
- if (islink ? lutimes(to.p_path, tv) : utimes(to.p_path, tv)) {
- warn("%sutimes: %s", islink ? "l" : "", to.p_path);
+ tspec[0] = fs->st_atim;
+ tspec[1] = fs->st_mtim;
+ if (utimensat(AT_FDCWD, to.p_path, tspec,
+ islink ? AT_SYMLINK_NOFOLLOW : 0)) {
+ warn("utimensat: %s", to.p_path);
rval = 1;
}
if (fdval ? fstat(fd, &ts) :
diff --git a/bin/mv/mv.c b/bin/mv/mv.c
index 3e832ac..999c8fc 100644
--- a/bin/mv/mv.c
+++ b/bin/mv/mv.c
@@ -273,7 +273,7 @@ do_move(const char *from, const char *to)
static int
fastcopy(const char *from, const char *to, struct stat *sbp)
{
- struct timeval tval[2];
+ struct timespec ts[2];
static u_int blen = MAXPHYS;
static char *bp = NULL;
mode_t oldmode;
@@ -350,10 +350,9 @@ err: if (unlink(to))
} else
warn("%s: cannot stat", to);
- tval[0].tv_sec = sbp->st_atime;
- tval[1].tv_sec = sbp->st_mtime;
- tval[0].tv_usec = tval[1].tv_usec = 0;
- if (utimes(to, tval))
+ ts[0] = sbp->st_atim;
+ ts[1] = sbp->st_mtim;
+ if (utimensat(AT_FDCWD, to, ts, 0))
warn("%s: set times", to);
if (close(to_fd)) {
OpenPOWER on IntegriCloud