mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2025-01-19 08:46:41 +01:00
Merge pull request #528 from DrMetallius/master
Used macros to disable localeconv() calls
This commit is contained in:
commit
c4ab6d733f
@ -5,7 +5,10 @@
|
||||
|
||||
#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
||||
#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
||||
|
||||
#ifndef NO_LOCALE_SUPPORT
|
||||
#include <clocale>
|
||||
#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<typename Lconv, bool=(sizeof(Lconv) >= sizeof(char*))>
|
||||
struct Locale {
|
||||
static char decimalPoint() {
|
||||
return '\0';
|
||||
}
|
||||
};
|
||||
|
||||
/// Return decimal_point for the current locale.
|
||||
template<typename Lconv>
|
||||
struct Locale<Lconv, true> {
|
||||
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<struct lconv>::decimalPoint();
|
||||
char decimalPoint = getDecimalPoint();
|
||||
if (decimalPoint != '\0' && decimalPoint != '.') {
|
||||
while (begin < end) {
|
||||
if (*begin == '.') {
|
||||
|
Loading…
x
Reference in New Issue
Block a user