From 9feaf2475029ae906d289266e994f1dbe42e36d7 Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Sat, 31 Jan 2009 05:17:28 +0000 Subject: [PATCH] Write timestamps with exactly 9 digits after the period. This ensures that the value written is both compatible with older mtree versions (which expect the value after the period to be an integer count of nanoseconds after the whole second) and is a correct floating-point value. Leave the parsing code unchanged so it will continue to read older files. --- usr.sbin/mtree/create.c | 2 +- usr.sbin/mtree/mtree.5 | 4 +++- usr.sbin/mtree/mtree.8 | 4 +++- usr.sbin/mtree/spec.c | 2 ++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/usr.sbin/mtree/create.c b/usr.sbin/mtree/create.c index f1b0313a746..eee5037c266 100644 --- a/usr.sbin/mtree/create.c +++ b/usr.sbin/mtree/create.c @@ -212,7 +212,7 @@ statf(int indent, FTSENT *p) output(indent, &offset, "size=%jd", (intmax_t)p->fts_statp->st_size); if (keys & F_TIME) - output(indent, &offset, "time=%ld.%ld", + output(indent, &offset, "time=%ld.%09ld", (long)p->fts_statp->st_mtimespec.tv_sec, p->fts_statp->st_mtimespec.tv_nsec); if (keys & F_CKSUM && S_ISREG(p->fts_statp->st_mode)) { diff --git a/usr.sbin/mtree/mtree.5 b/usr.sbin/mtree/mtree.5 index db549430692..375cc789969 100644 --- a/usr.sbin/mtree/mtree.5 +++ b/usr.sbin/mtree/mtree.5 @@ -200,7 +200,9 @@ The size, in bytes, of the file. .It Cm link The file the symbolic link is expected to reference. .It Cm time -The last modification time of the file. +The last modification time of the file, in seconds and nanoseconds. +The value should include a period character and exactly nine digits +after the period. .It Cm type The type of the file; may be set to any one of the following: .Pp diff --git a/usr.sbin/mtree/mtree.8 b/usr.sbin/mtree/mtree.8 index 439eaab525a..f0a93ed8cda 100644 --- a/usr.sbin/mtree/mtree.8 +++ b/usr.sbin/mtree/mtree.8 @@ -233,7 +233,9 @@ The size, in bytes, of the file. .It Cm link The file the symbolic link is expected to reference. .It Cm time -The last modification time of the file. +The last modification time of the file, in seconds and nanoseconds. +The value should include a period character and exactly nine digits +after the period. .It Cm type The type of the file; may be set to any one of the following: .Pp diff --git a/usr.sbin/mtree/spec.c b/usr.sbin/mtree/spec.c index f2e7647a9a0..c7c6460de21 100644 --- a/usr.sbin/mtree/spec.c +++ b/usr.sbin/mtree/spec.c @@ -255,6 +255,8 @@ set(char *t, NODE *ip) case F_TIME: ip->st_mtimespec.tv_sec = strtoul(val, &ep, 10); if (*ep == '.') { + /* Note: we require exactly nine + * digits after the decimal point. */ val = ep + 1; ip->st_mtimespec.tv_nsec = strtoul(val, &ep, 10);