aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Luis Duran <jlduran@gmail.com>2022-10-18 02:24:03 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2022-11-01 00:44:41 +0000
commitbabe20c88c28ca87c0ab28cc15f1296973a86d1e (patch)
tree39a86957631b78aaf37041918b347be1a15c8fe8
parent8e5a2135210d2c53ef8bdcbb1b268d4bb5081f04 (diff)
downloadsrc-babe20c88c28ca87c0ab28cc15f1296973a86d1e.tar.gz
src-babe20c88c28ca87c0ab28cc15f1296973a86d1e.zip
strfmon: Fix an edge case when sep_by_space is 2
(cherry picked from commit 750fe3e6a4619e040c7b0951775698b61290102e)
-rw-r--r--lib/libc/stdlib/strfmon.c8
-rw-r--r--lib/libc/tests/stdlib/strfmon_test.c2
2 files changed, 7 insertions, 3 deletions
diff --git a/lib/libc/stdlib/strfmon.c b/lib/libc/stdlib/strfmon.c
index a26521bb694d..d3266fe52ed5 100644
--- a/lib/libc/stdlib/strfmon.c
+++ b/lib/libc/stdlib/strfmon.c
@@ -296,7 +296,8 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
* non-negative value
* = 1 - space separates the symbol from the value
* = 2 - space separates the symbol and the sign string,
- * if adjacent.
+ * if adjacent; otherwise, a space separates
+ * the sign string from the value
*
* p_sign_posn & n_sign_posn
*
@@ -338,8 +339,11 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
} else if (sep_by_space == 1)
PRINT(space_char);
}
- } else if (sign_posn == 1)
+ } else if (sign_posn == 1) {
PRINTS(signstr);
+ if (sep_by_space == 2)
+ PRINT(' ');
+ }
PRINTS(asciivalue);
diff --git a/lib/libc/tests/stdlib/strfmon_test.c b/lib/libc/tests/stdlib/strfmon_test.c
index d4d1f6a580d9..664d1811dc46 100644
--- a/lib/libc/tests/stdlib/strfmon_test.c
+++ b/lib/libc/tests/stdlib/strfmon_test.c
@@ -116,7 +116,7 @@ ATF_TC_BODY(strfmon_cs_precedes_0, tc)
/* sep_by_space x sign_posn */
{ "[(123.00$)] [-123.00$] [123.00$-] [123.00-$] [123.00$-]" },
{ "[(123.00 $)] [-123.00 $] [123.00 $-] [123.00 -$] [123.00 $-]" },
- { "[(123.00$)] [-123.00$] [123.00$ -] [123.00- $] [123.00$ -]" }, /* XXX */
+ { "[(123.00$)] [- 123.00$] [123.00$ -] [123.00- $] [123.00$ -]" },
};
size_t i, j;
struct lconv *lc;