diff options
author | Paul Sherwood <paul.sherwood@codethink.co.uk> | 2014-04-29 20:37:28 +0000 |
---|---|---|
committer | Paul Sherwood <paul.sherwood@codethink.co.uk> | 2014-04-29 20:37:28 +0000 |
commit | e98c205a5c3fb893ffdda3f5e05d1967b4a79c1d (patch) | |
tree | 3ecbd4f05ab9601cefa7b322323039795db440a9 /gettext.c | |
parent | 43efcf42382e87de4aa423e5e1607958ad1717d0 (diff) | |
parent | 0bc85abb7aa9b24b093253018801a0fb43d01122 (diff) | |
download | git-baserock/ps/update-git.tar.gz |
Merge tag 'v1.9.2' into HEADbaserock/ps/update-git
Git 1.9.2
Diffstat (limited to 'gettext.c')
-rw-r--r-- | gettext.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -29,6 +29,17 @@ int use_gettext_poison(void) #endif #ifndef NO_GETTEXT +static int test_vsnprintf(const char *fmt, ...) +{ + char buf[26]; + int ret; + va_list ap; + va_start(ap, fmt); + ret = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return ret; +} + static const char *charset; static void init_gettext_charset(const char *domain) { @@ -99,9 +110,7 @@ static void init_gettext_charset(const char *domain) $ LANGUAGE= LANG=de_DE.utf8 ./test test: Kein passendes Ger?t gefunden - In the long term we should probably see about getting that - vsnprintf bug in glibc fixed, and audit our code so it won't - fall apart under a non-C locale. + The vsnprintf bug has been fixed since glibc 2.17. Then we could simply set LC_CTYPE from the environment, which would make things like the external perror(3) messages work. @@ -115,7 +124,9 @@ static void init_gettext_charset(const char *domain) setlocale(LC_CTYPE, ""); charset = locale_charset(); bind_textdomain_codeset(domain, charset); - setlocale(LC_CTYPE, "C"); + /* the string is taken from v0.99.6~1 */ + if (test_vsnprintf("%.*s", 13, "David_K\345gedal") < 0) + setlocale(LC_CTYPE, "C"); } void git_setup_gettext(void) |