[prev in list] [next in list] [prev in thread] [next in thread] 

List:       semsdev
Subject:    [Semsdev] git:master: b/f: fix json2arg for numbers with exponent
From:       Stefan Sayer <stefan.sayer () googlemail ! com>
Date:       2014-02-27 14:53:18
Message-ID: 20140227145318.C777AEF8074 () rimmer ! ryngle ! com
[Download RAW message or body]

Module: sems
Branch: master
Commit: 1e7d29957d6196f9ac228f56a35023555b9e9260
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=1e7d29957d6196f9ac228f56a35023555b9e9260


Author: Stefan Sayer <stefan.sayer@googlemail.com>
Committer: Stefan Sayer <stefan.sayer@googlemail.com>
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
Semsdev@lists.iptel.org
http://lists.iptel.org/mailman/listinfo/semsdev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic