diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2020-03-11 21:15:35 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2020-03-11 22:38:25 +0200 |
commit | 74a5af180a6a6c4b8c90cefb37ee900d3fea7dc6 (patch) | |
tree | c7d3940f5191a5c7e55139d737ce30b17c5b0cd6 | |
parent | DOS: Update dos/Makefile for DJGPP 2.05. (diff) | |
download | xz-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.c | 14 |
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; } |