summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2010-10-21 18:41:24 +0200
committerJim Meyering <meyering@redhat.com>2010-11-03 13:10:50 +0100
commitdb42ae787de7165ee3a1bbf8d4988d0698d7c1df (patch)
treeedda302f85ea9c7cd29384d50b260cbfbafb6e56 /tests
parent272f8bf0ac23d7c9ac96f3cb53e114cd3566875b (diff)
downloadcoreutils-db42ae787de7165ee3a1bbf8d4988d0698d7c1df.tar.xz
stat: revert %X-%Y-%Z change; use e.g., %:X to print fractional seconds
This reverts part of the recent commit 9069af45, "stat: print timestamps to full resolution", which made %X, %Y, %Z print floating point numbers. We prefer to retain portability of %X, %Y and %Z uses, while still providing access to full-resolution time stamps via modified format strings. Also make the new %W consistent. * src/stat.c: Include "xstrtol.h". (print_it): Accept a new %...:[XYZ] format directive, e.g., %:X, to print the nanoseconds portion of the corresponding time. For example, %3.3:Y prints the zero-padded, truncated, milliseconds part of the time of last modification. (print_it): Update print_func signature to match. (neg_to_zero): New helper function. (epoch_time): Remove function; replace with... (epoch_sec): New function; use timetostr. (out_ns): New function. Use "09" only when no other modifier is specified. (print_statfs): Change type of "m" to unsigned int, now that it must accommodate values larger than 255. (print_stat): Likewise. Map :X to a code of 'X' + 256. Likewise for Y, Z and W. (usage): Update. * tests/touch/60-seconds: Use %Y.%:Y in place of %Y. * tests/misc/stat-nanoseconds: New file. * tests/Makefile.am (TESTS): Add it. * NEWS (Changes in behavior): Mention this. With improvements by Pádraig Brady. Thanks to Andreas Schwab for raising the issue.
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am1
-rwxr-xr-xtests/misc/stat-nanoseconds36
-rwxr-xr-xtests/touch/60-seconds2
3 files changed, 38 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 84db367b1..dd1c509b9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -244,6 +244,7 @@ TESTS = \
misc/stat-fmt \
misc/stat-hyphen \
misc/stat-mount \
+ misc/stat-nanoseconds \
misc/stat-printf \
misc/stat-slash \
misc/stdbuf \
diff --git a/tests/misc/stat-nanoseconds b/tests/misc/stat-nanoseconds
new file mode 100755
index 000000000..314f43e2c
--- /dev/null
+++ b/tests/misc/stat-nanoseconds
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Exercise format strings involving %:X, %:Y, etc.
+
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+test "$VERBOSE" = yes && stat --version
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+touch -d '2010-10-21 18:43:33.023456789' k || framework_failure_
+
+ls --full-time | grep 18:43:33.023456789 \
+ || skip_ this file system does not support sub-second time stamps
+
+test "$(stat -c %:X k)" = 023456789 || fail=1
+test "$(stat -c %3:X k)" = 23456789 || fail=1
+test "$(stat -c %3.3:X k)" = 023 || fail=1
+test "$(stat -c %.3:X k)" = 023 || fail=1
+test "$(stat -c %03.3:X k)" = 023 || fail=1
+test "$(stat -c %-5.3:X k)" = '023 ' || fail=1
+test "$(stat -c %05.3:X k)" = ' 023' || fail=1
+test "$(stat -c %010.3:X k)" = ' 023' || fail=1
+
+Exit $fail
diff --git a/tests/touch/60-seconds b/tests/touch/60-seconds
index f98f0c5d1..d0082967c 100755
--- a/tests/touch/60-seconds
+++ b/tests/touch/60-seconds
@@ -30,7 +30,7 @@ echo 60.000000000 > exp || framework_failure
# an `invalid date format'. Specifying 60 seconds *is* valid.
TZ=UTC0 touch -t 197001010000.60 f || fail=1
-stat --p='%Y\n' f > out || fail=1
+stat --p='%Y.%:Y\n' f > out || fail=1
compare out exp || fail=1