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: Ævar Arnfjörð Bjarmason <hidden>
Date: 2016-06-15 22:49:25

On Tue, Aug 31, 2010 at 15:18, Jonathan Nieder [off-list ref] wrote:
Ævar Arnfjörð Bjarmason wrote:
quoted
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.
I'll work something in about that.
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?
I certainly hope so. I was planning on documenting its usage,
Johannes?
quoted
--- 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.
But I'm hopefully sidestepping that issue by passing it to
bind_textdomain_codeset() right away.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help