Module: sems Branch: master Commit: 1e7d29957d6196f9ac228f56a35023555b9e9260 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=1e7d29957d6196f9ac228f56a35023555b9e9260
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Mon Feb 17 17:07:10 2014 +0100 b/f: fix json2arg for numbers with exponent --- core/AmArg.cpp | 2 +- core/jsonxx.cpp | 58 +++++++++++++++++++++--------------------- core/tests/test_jsonarg.cpp | 3 +- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/core/AmArg.cpp b/core/AmArg.cpp index 4350c4d..5977830 100644 --- a/core/AmArg.cpp +++ b/core/AmArg.cpp @@ -381,7 +381,7 @@ void AmArg::assertArrayFmt(const char* format) const { for (size_t i=0;i<fmt_len;i++) { switch (format[i]) { case 'i': assertArgInt(get(i)); got+='i'; break; - case 'l': assertArgLongLong(get(i)); got+='i'; break; + case 'l': assertArgLongLong(get(i)); got+='l'; break; case 't': assertArgBool(get(i)); got+='t'; break; case 'f': assertArgDouble(get(i)); got+='f'; break; case 's': assertArgCStr(get(i)); got+='s'; break; diff --git a/core/jsonxx.cpp b/core/jsonxx.cpp index b1b79e7..88f416c 100644 --- a/core/jsonxx.cpp +++ b/core/jsonxx.cpp @@ -167,35 +167,35 @@ bool parse_float(std::istream& input, double* value) { */ -bool parse_number(std::istream& input, long* value) { - eat_whitespaces(input); - char ch; - std::string value_str; - int sign = 1; - if (match("-", input)) { - sign = -1; - } else { - match("+", input); - } - while(input && !input.eof()) { - input.get(ch); - if (!isdigit(ch)) { - input.putback(ch); - break; - } - value_str.push_back(ch); - } - if (value_str.size() > 0) { - std::istringstream(value_str) >> *value; - *value*=sign; - return true; - } else { - return false; - } -} +// bool parse_number(std::istream& input, long* value) { +// eat_whitespaces(input); +// char ch; +// std::string value_str; +// int sign = 1; +// if (match("-", input)) { +// sign = -1; +// } else { +// match("+", input); +// } +// while(input && !input.eof()) { +// input.get(ch); +// if (!isdigit(ch)) { +// input.putback(ch); +// break; +// } +// value_str.push_back(ch); +// } +// if (value_str.size() > 0) { +// std::istringstream(value_str) >> *value; +// *value*=sign; +// return true; +// } else { +// return false; +// } +// } -bool parse_number(std::istream& input, int* value) { +bool parse_number(std::istream& input, long* value) { eat_whitespaces(input); char ch; std::string value_str; @@ -204,7 +204,7 @@ bool parse_number(std::istream& input, int* value) { int sign = 1; int e_sign = 1; bool correct = true; - int e_value; + long e_value; enum { p_number, @@ -303,7 +303,7 @@ bool parse_number(std::istream& input, int* value) { return false; } - *value *= pow(10, e_value); + *value *= powl(10, e_value); } return true; diff --git a/core/tests/test_jsonarg.cpp b/core/tests/test_jsonarg.cpp index aa889fc..4cf77e1 100644 --- a/core/tests/test_jsonarg.cpp +++ b/core/tests/test_jsonarg.cpp @@ -54,7 +54,8 @@ FCTMF_SUITE_BGN(test_jsonarg) { // DBG("s.c_str() %s\n", s.c_str() ); AmArg rpc_params; fct_chk(json2arg(s.c_str(), rpc_params)); - fct_chk(isArgInt(rpc_params["result"]) && rpc_params["result"].asInt() == 0); + fct_chk(isArgInt(rpc_params["result"])); + fct_chk(rpc_params["result"].asInt() == 0); } FCT_TEST_END(); FCT_TEST_BGN(json_number_e_pow) { _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
