diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp index 4930c17..6167327 100644 --- a/src/lib_json/json_reader.cpp +++ b/src/lib_json/json_reader.cpp @@ -1619,6 +1619,7 @@ bool OurReader::decodeDouble(Token& token, Value& decoded) { Char buffer[bufferSize + 1]; memcpy(buffer, token.start_, ulength); buffer[length] = 0; + fixNumericLocaleInput(buffer, buffer + length); count = sscanf(buffer, format, &value); } else { JSONCPP_STRING buffer(token.start_, token.end_); diff --git a/src/lib_json/json_tool.h b/src/lib_json/json_tool.h index d16d7b8..50391ef 100644 --- a/src/lib_json/json_tool.h +++ b/src/lib_json/json_tool.h @@ -5,6 +5,7 @@ #ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED #define LIB_JSONCPP_JSON_TOOL_H_INCLUDED +#include /* This header provides common string manipulation support, such as UTF-8, * portable conversion from/to string... @@ -82,6 +83,18 @@ static inline void fixNumericLocale(char* begin, char* end) { } } +static inline void fixNumericLocaleInput(char* begin, char* end) { + struct lconv* lc = localeconv(); + if ((lc != NULL) && (*(lc->decimal_point) != '.')) { + while (begin < end) { + if (*begin == '.') { + *begin = *(lc->decimal_point); + } + ++begin; + } + } +} + } // namespace Json { #endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED