summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Shahaf <danielsh@apache.org>2019-12-24 18:25:09 +0000
committerDaniel Shahaf <danielsh@apache.org>2019-12-26 04:21:47 +0000
commit525faae5498adb4b4f1c0f4657b9ef71fc31c4d6 (patch)
tree296ad1d6ff074c755bce6feff6582dcae5143505
parent8e0253af022abe9f9225352aae1088d6621a81ab (diff)
downloadzsh-525faae5498adb4b4f1c0f4657b9ef71fc31c4d6.tar.gz
zsh-525faae5498adb4b4f1c0f4657b9ef71fc31c4d6.zip
45137: zformat: Allow the specifying minimum width and a dot with an empty maximum width.
Before this commit, format specs such as '%5.s' would be printed literally. Now, they are treated as equivalent to '%5s'. The '.' character is not allowed to be used in specs, so there is no incompatibility.
-rw-r--r--ChangeLog4
-rw-r--r--Src/Modules/zutil.c3
-rw-r--r--Test/V13zformat.ztst2
3 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index fe3b6951c..321216c7a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2019-12-26 Daniel Shahaf <danielsh@apache.org>
+ * 45137: Src/Modules/zutil.c, Test/V13zformat.ztst: zformat:
+ Allow the specifying minimum width and a dot with an empty
+ maximum width.
+
* 45138: Src/Modules/zutil.c, Test/V13zformat.ztst: Add zformat
unit tests.
diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index de5fe8034..7d9bf05d6 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -797,8 +797,7 @@ static char *zformat_substring(char* instr, char **specs, char **outp,
if ((*s == '.' || testit) && idigit(s[1])) {
for (max = 0, s++; idigit(*s); s++)
max = (max * 10) + (int) STOUC(*s) - '0';
- }
- else if (testit)
+ } else if (*s == '.' || testit)
s++;
if (testit && STOUC(*s)) {
diff --git a/Test/V13zformat.ztst b/Test/V13zformat.ztst
index d8de2bb04..982866e13 100644
--- a/Test/V13zformat.ztst
+++ b/Test/V13zformat.ztst
@@ -17,12 +17,14 @@
zformat_and_print_s '%s' foo
zformat_and_print_s '%5s' min
zformat_and_print_s '%-5s' neg
+ zformat_and_print_s '%5.s' empty
zformat_and_print_s '%.5s' max
zformat_and_print_s '%.5s' truncated
0:basic zformat test
>'foo'
>'min '
>' neg'
+>'empty'
>'max'
>'trunc'