From 0e14b8f425c562749d3821a42414b1ce6b3b0923 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sun, 28 Jun 2009 14:43:01 -0400 Subject: 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 Signed-off-by: Mike Frysinger --- extra/locale/gen_wc8bit.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'extra/locale') 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"))) { -- cgit v1.2.3