From 70bd21bab54bfe827d0f3ac8f4394a80335211bb Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 20 May 2019 00:25:51 +0200 Subject: [PATCH] intl: Work around setlocale bug on Android 4.3. * gettext-runtime/intl/setlocale.c (setlocale_unixlike): New wrapper for Android. --- gettext-runtime/intl/setlocale.c | 35 +++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/gettext-runtime/intl/setlocale.c b/gettext-runtime/intl/setlocale.c index 52071220f..2995db1c8 100644 --- a/gettext-runtime/intl/setlocale.c +++ b/gettext-runtime/intl/setlocale.c @@ -1,5 +1,5 @@ /* setlocale() function that respects the locale chosen by the user. - Copyright (C) 2009, 2011, 2013, 2018 Free Software Foundation, Inc. + Copyright (C) 2009, 2011, 2013, 2018-2019 Free Software Foundation, Inc. Written by Bruno Haible , 2009. This program is free software: you can redistribute it and/or modify @@ -802,6 +802,39 @@ setlocale_unixlike (int category, const char *locale) return NULL; } +# elif defined __ANDROID__ + +/* Like setlocale, but accept also the locale names "C" and "POSIX". */ +static char * +setlocale_unixlike (int category, const char *locale) +{ + char *result = setlocale (category, locale); + if (result == NULL) + switch (category) + { + case LC_CTYPE: + case LC_NUMERIC: + case LC_TIME: + case LC_COLLATE: + case LC_MONETARY: + case LC_MESSAGES: + case LC_ALL: + case LC_PAPER: + case LC_NAME: + case LC_ADDRESS: + case LC_TELEPHONE: + case LC_MEASUREMENT: + if (locale == NULL + || strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) + result = (char *) "C"; + break; + default: + break; + } + return result; +} +# define setlocale setlocale_unixlike + # else # define setlocale_unixlike setlocale # endif -- 2.47.2