Ævar Arnfjörð Bjarmason wrote:
In 107880a I removed our use of setlocale(LC_CTYPE, "") because of a
bug in the GNU C Library [1]
Future readers might benefit from a reminder that it is vsnprintf that
is broken.
Aside, not about this patch: glibc printf can be very convenient for
translators, because of format strings like "%4$s". Do other common
platforms like FreeBSD and Mingw have something similar?
quoted hunk ↗ jump to hunk
--- a/gettext.c
+++ b/gettext.c
@@ -17,5 +19,9 @@ extern void git_setup_gettext(void) {
}
(void)setlocale(LC_MESSAGES, "");
+ (void)setlocale(LC_CTYPE, "");
+ charset = nl_langinfo(CODESET);
+ (void)bind_textdomain_codeset("git", charset);
+ (void)setlocale(LC_CTYPE, "C");
For the curious: we cannot use
setlocale(LC_CTYPE, "");
charset = nl_langinfo(CODESET);
setlocale(LC_CTYPE, "C");
bind_textdomain_codeset("git", charset);
because nl_langinfo returns a pointer to a static buffer that might
be wiped out by setlocale() iirc.
Thanks.