From: Jonathan Nieder Date: Tue, 31 Aug 2010 15:18:01 GMT Subject: Re: [PATCH/RFC 07/17] gettext.c: work around us not using setlocale(LC_CTYPE, "") Message-ID: <20100831151800.GG2315@burratino> In-Reply-To: <1283203703-26923-8-git-send-email-avarab@gmail.com> Æ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? > --- 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.