git: 34f88528edba - main - strfmon: Fix formatting of a second fixed-width value
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 25 Oct 2022 21:51:30 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=34f88528edba44b2703ba8c772bef077eca33dab
commit 34f88528edba44b2703ba8c772bef077eca33dab
Author: Jose Luis Duran <jlduran@gmail.com>
AuthorDate: 2022-10-21 19:34:09 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-10-25 21:40:17 +0000
strfmon: Fix formatting of a second fixed-width value
There is a bug when formatting two consecutive values using fixed-widths
and the values need padding. This was because the value of pad_size
was zeroed only every other time.
Format Before After
[%8n] [%8n] [ $123.45] [ $123.45] [ $123.45] [ $123.45]
Reviewed by: kib
PR: 267282
Github PR: #619
MFC after: 1 week
---
lib/libc/stdlib/strfmon.c | 2 +-
lib/libc/tests/stdlib/strfmon_test.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/libc/stdlib/strfmon.c b/lib/libc/stdlib/strfmon.c
index d453b7a3943b..c0579f31e821 100644
--- a/lib/libc/stdlib/strfmon.c
+++ b/lib/libc/stdlib/strfmon.c
@@ -135,7 +135,6 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
fmt = format;
asciivalue = NULL;
currency_symbol = NULL;
- pad_size = 0;
while (*fmt) {
/* pass nonformating characters AS IS */
@@ -155,6 +154,7 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
/* set up initial values */
flags = (NEED_GROUPING|LOCALE_POSN);
pad_char = ' '; /* padding character is "space" */
+ pad_size = 0; /* no padding initially */
left_prec = -1; /* no left precision specified */
right_prec = -1; /* no right precision specified */
width = -1; /* no width specified */
diff --git a/lib/libc/tests/stdlib/strfmon_test.c b/lib/libc/tests/stdlib/strfmon_test.c
index 664d1811dc46..d8e4f478547a 100644
--- a/lib/libc/tests/stdlib/strfmon_test.c
+++ b/lib/libc/tests/stdlib/strfmon_test.c
@@ -74,7 +74,7 @@ ATF_TC_BODY(strfmon_examples, tc)
const char *expected;
} tests[] = {
{ "%n", "[$123.45] [-$123.45] [$3,456.78]" },
- { "%11n", "[ $123.45] [ -$123.45] [ $3,456.78]" }, /* XXX */
+ { "%11n", "[ $123.45] [ -$123.45] [ $3,456.78]" },
{ "%#5n", "[ $ 123.45] [-$ 123.45] [ $ 3,456.78]" },
{ "%=*#5n", "[ $***123.45] [-$***123.45] [ $*3,456.78]" },
{ "%=0#5n", "[ $000123.45] [-$000123.45] [ $03,456.78]" },