aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2020-03-11 21:15:35 +0200
committerLasse Collin <lasse.collin@tukaani.org>2020-03-11 22:38:25 +0200
commit74a5af180a6a6c4b8c90cefb37ee900d3fea7dc6 (patch)
treec7d3940f5191a5c7e55139d737ce30b17c5b0cd6
parentDOS: Update dos/Makefile for DJGPP 2.05. (diff)
downloadxz-74a5af180a6a6c4b8c90cefb37ee900d3fea7dc6.tar.xz
xz: Never use thousand separators in DJGPP builds.
DJGPP 2.05 added support for thousands separators but it's broken at least under WinXP with Finnish locale that uses a non-breaking space as the thousands separator. Workaround by disabling thousands separators for DJGPP builds.
-rw-r--r--src/xz/util.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/xz/util.c b/src/xz/util.c
index 39e8ec8b..a1339f4f 100644
--- a/src/xz/util.c
+++ b/src/xz/util.c
@@ -142,14 +142,24 @@ round_up_to_mib(uint64_t n)
}
-/// Check if thousand separator is supported. Run-time checking is easiest,
-/// because it seems to be sometimes lacking even on POSIXish system.
+/// Check if thousands separator is supported. Run-time checking is easiest
+/// because it seems to be sometimes lacking even on a POSIXish system.
+/// Note that trying to use thousands separators when snprintf() doesn't
+/// support them results in undefined behavior. This just has happened to
+/// work well enough in practice.
+///
+/// DJGPP 2.05 added support for thousands separators but it's broken
+/// at least under WinXP with Finnish locale that uses a non-breaking space
+/// as the thousands separator. Workaround by disabling thousands separators
+/// for DJGPP builds.
static void
check_thousand_sep(uint32_t slot)
{
if (thousand == UNKNOWN) {
bufs[slot][0] = '\0';
+#ifndef __DJGPP__
snprintf(bufs[slot], sizeof(bufs[slot]), "%'u", 1U);
+#endif
thousand = bufs[slot][0] == '1' ? WORKS : BROKEN;
}