diff --git a/src/lib_json/json_tool.h b/src/lib_json/json_tool.h index 4a829b0b1..0e729e637 100644 --- a/src/lib_json/json_tool.h +++ b/src/lib_json/json_tool.h @@ -5,7 +5,10 @@ #ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED #define LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +#ifndef NO_LOCALE_SUPPORT #include +#endif /* This header provides common string manipulation support, such as UTF-8, * portable conversion from/to string... @@ -14,26 +17,14 @@ */ namespace Json { - -/// Fallback for decimal_point on android, where the lconv is an empty struct. -template= sizeof(char*))> -struct Locale { - static char decimalPoint() { - return '\0'; - } -}; - -/// Return decimal_point for the current locale. -template -struct Locale { - static char decimalPoint() { - Lconv* lc = localeconv(); - if (lc == NULL) { - return '\0'; - } - return *(lc->decimal_point); - } -}; +static char getDecimalPoint() { +#ifdef NO_LOCALE_SUPPORT + return '\0'; +#else + struct lconv* lc = localeconv(); + return lc ? *(lc->decimal_point) : '\0'; +#endif +} /// Converts a unicode code-point to UTF-8. static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) { @@ -104,7 +95,7 @@ static inline void fixNumericLocale(char* begin, char* end) { } static inline void fixNumericLocaleInput(char* begin, char* end) { - char decimalPoint = Locale::decimalPoint(); + char decimalPoint = getDecimalPoint(); if (decimalPoint != '\0' && decimalPoint != '.') { while (begin < end) { if (*begin == '.') {