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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Æ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.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]