Re: [PATCH/RFC 07/17] gettext.c: work around us not using setlocale(LC_CTYPE, "")
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Aug 31, 2010, 15:18 UTC
- 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?
Show 10 quoted lines
> --- 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.