summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2022-03-05 11:23:01 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2022-03-05 11:23:38 -0800
commit4306bb6246d4bdf02c2f8bcfa4e78ef6539ed0bf (patch)
tree16b6e642a95d66e7f7291677b6d729b1d60b6967
parent8f31074cb4c9b023ef0aa47a0ce34c92745169b6 (diff)
downloadcoreutils-4306bb6246d4bdf02c2f8bcfa4e78ef6539ed0bf.tar.gz
date: fix newly-introduced %%-N bug
* src/date.c (adjust_resolution): Don’t mishandle %%-N. * tests/misc/date.pl (pct-pct): New test.
-rw-r--r--src/date.c15
-rwxr-xr-xtests/misc/date.pl3
2 files changed, 13 insertions, 5 deletions
diff --git a/src/date.c b/src/date.c
index 163141adc..9a282e2f5 100644
--- a/src/date.c
+++ b/src/date.c
@@ -310,12 +310,17 @@ adjust_resolution (char const *format)
char *copy = NULL;
for (char const *f = format; *f; f++)
- if (f[0] == '%' && f[1] == '-' && f[2] == 'N')
+ if (f[0] == '%')
{
- if (!copy)
- copy = xstrdup (format);
- copy[f + 1 - format] = '0' + res_width (gettime_res ());
- f += 2;
+ if (f[1] == '-' && f[2] == 'N')
+ {
+ if (!copy)
+ copy = xstrdup (format);
+ copy[f + 1 - format] = '0' + res_width (gettime_res ());
+ f += 2;
+ }
+ else
+ f += f[1] == '%';
}
return copy;
diff --git a/tests/misc/date.pl b/tests/misc/date.pl
index ef7080e33..f40a37702 100755
--- a/tests/misc/date.pl
+++ b/tests/misc/date.pl
@@ -313,6 +313,9 @@ my @Tests =
['mtz4', '-u -d "09:00T" +%T', {OUT => '16:00:00'}],
['mtz5', '-u -d "09:00X" +%T', {OUT => '20:00:00'}],
['mtz6', '-u -d "09:00Z" +%T', {OUT => '09:00:00'}],
+
+ # test with %%-N
+ ['pct-pct', '+%%-N', {OUT => '%-N'}],
);
# Repeat the cross-dst test, using Jan 1, 2005 and every interval from 1..364.