diff options
author | Jim Meyering <meyering@redhat.com> | 2010-10-21 18:41:24 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2010-11-03 13:10:50 +0100 |
commit | db42ae787de7165ee3a1bbf8d4988d0698d7c1df (patch) | |
tree | edda302f85ea9c7cd29384d50b260cbfbafb6e56 /tests | |
parent | 272f8bf0ac23d7c9ac96f3cb53e114cd3566875b (diff) | |
download | coreutils-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.am | 1 | ||||
-rwxr-xr-x | tests/misc/stat-nanoseconds | 36 | ||||
-rwxr-xr-x | tests/touch/60-seconds | 2 |
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 |