Thread (44 messages) flat view 44 messages, 5 authors, 2016-06-15

Re: [PATCH/RFC 07/17] gettext.c: work around us not using setlocale(LC_CTYPE, "")

From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:49:25

Æ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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help