diff options
author | Mike Frysinger <vapier@gentoo.org> | 2009-06-28 14:43:01 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-06-28 14:43:01 -0400 |
commit | 0e14b8f425c562749d3821a42414b1ce6b3b0923 (patch) | |
tree | e580a0c6dbc4779b47b4968a5610f8cb23d47dc1 /extra | |
parent | 8d005aa103606748e113d1a7a09cfb2aeb6f7140 (diff) |
locale: gen_wc8bit: try to find UTF8 locale automatically
Rather than require everyone to have en_US.UTF-8 when we really need any
UTF8 locale, do a scan for possible UTF8 locales if the default en_US does
not exist. Hopefully this should make the utility "just work" for most
people.
Reported-by: Daniel Cordero <theappleman@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'extra')
-rw-r--r-- | extra/locale/gen_wc8bit.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/extra/locale/gen_wc8bit.c b/extra/locale/gen_wc8bit.c index 418a1ac9d..126cd1ace 100644 --- a/extra/locale/gen_wc8bit.c +++ b/extra/locale/gen_wc8bit.c @@ -98,8 +98,31 @@ int main(int argc, char **argv) int total_size = 0; if (!setlocale(LC_CTYPE, "en_US.UTF-8")) { - printf("setlocale(LC_CTYPE,\"en_US.UTF-8\") failed!\n"); + /* Silly foreigners disabling en_US locales */ + FILE *fp = popen("locale -a", "r"); + if (!fp) + goto locale_failure; + + while (!feof(fp)) { + char buf[256]; + size_t len; + + if (fgets(buf, sizeof(buf) - 10, fp) == NULL) + goto locale_failure; + + len = strlen(buf); + if (buf[len - 1] == '\n') + buf[--len] = '\0'; + strcat(buf, ".UTF8"); + if (setlocale(LC_CTYPE, buf)) + goto locale_success; + } + + locale_failure: + printf("could not find a UTF8 locale ... please enable en_US.UTF-8\n"); return EXIT_FAILURE; + locale_success: + pclose(fp); } if (!(out = fopen("c8tables.h","w"))) { |