From 08183a36843d8f629d62c981a53b935d2da48878 Mon Sep 17 00:00:00 2001
From: Iztok Jeras <iztok.jeras@redpitaya.com>
Date: 周五, 16 10月 2015 18:36:09 +0800
Subject: [PATCH] integer parser: added test which caused issues with gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf cross compiler

---
 libscpi/src/utils.c |   33 ++++++++++++++-------------------
 1 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/libscpi/src/utils.c b/libscpi/src/utils.c
index 3d5f8c6..301712b 100644
--- a/libscpi/src/utils.c
+++ b/libscpi/src/utils.c
@@ -141,7 +141,7 @@
  * @return number of bytes written to str (without '\0')
  */
 size_t SCPI_Int32ToStr(int32_t val, char * str, size_t len) {
-    return UInt32ToStrBaseSign((int32_t) val, str, len, 10, TRUE);
+    return UInt32ToStrBaseSign((uint32_t) val, str, len, 10, TRUE);
 }
 
 /**
@@ -229,7 +229,7 @@
  * @return number of bytes written to str (without '\0')
  */
 size_t SCPI_Int64ToStr(int64_t val, char * str, size_t len) {
-    return UInt64ToStrBaseSign((int64_t) val, str, len, 10, TRUE);
+    return UInt64ToStrBaseSign((uint64_t) val, str, len, 10, TRUE);
 }
 
 /**
@@ -508,8 +508,7 @@
 #define SKIP_CMD(n) do {cmd_ptr += (n);  cmd_len -= (n);} while(0)
 
     scpi_bool_t result = FALSE;
-    int leftFlag = 0; // flag for '[' on left
-    int rightFlag = 0; // flag for ']' on right
+    int brackets = 0;
     int cmd_sep_pos = 0;
 
     size_t numbers_idx = 0;
@@ -534,7 +533,7 @@
     /* now support optional keywords in pattern style, e.g. [:MEASure]:VOLTage:DC? */
     if (pattern_ptr[0] == '[') { // skip first '['
         SKIP_PATTERN(1);
-        leftFlag++;
+        brackets++;
     }
     if (pattern_ptr[0] == ':') { // skip first ':'
         SKIP_PATTERN(1);
@@ -554,10 +553,6 @@
     while (1) {
         int pattern_sep_pos = patternSeparatorPos(pattern_ptr, pattern_len);
 
-        if ((leftFlag > 0) && (rightFlag > 0)) {
-            leftFlag--;
-            rightFlag--;
-        }
         cmd_sep_pos = cmdSeparatorPos(cmd_ptr, cmd_len);
 
         if ((pattern_sep_pos > 0) && pattern_ptr[pattern_sep_pos - 1] == '#') {
@@ -595,16 +590,16 @@
                     pattern_sep_pos = patternSeparatorPos(pattern_ptr, pattern_len);
                     switch (pattern_ptr[pattern_sep_pos]) {
                         case '[':
-                            leftFlag++;
+                            brackets++;
                             break;
                         case ']':
-                            leftFlag--;
+                            brackets--;
                             break;
                         default:
                             break;
                     }
                     SKIP_PATTERN(pattern_sep_pos + 1);
-                    if (leftFlag == 0) {
+                    if (brackets == 0) {
                         if ((pattern_len > 0) && (pattern_ptr[0] == '[')) {
                             continue;
                         } else {
@@ -630,14 +625,14 @@
                     && (pattern_ptr[1] == ':')) {
                 SKIP_PATTERN(2); // for skip '[' in "[:"
                 SKIP_CMD(1);
-                leftFlag++;
+                brackets++;
             } else if ((pattern_len > 1)
                     && (pattern_ptr[1] == cmd_ptr[0])
                     && (pattern_ptr[0] == ']')
                     && (pattern_ptr[1] == ':')) {
                 SKIP_PATTERN(2); // for skip ']' in "]:"
                 SKIP_CMD(1);
-                rightFlag++;
+                brackets--;
             } else if ((pattern_len > 2)
                     && (pattern_ptr[2] == cmd_ptr[0])
                     && (pattern_ptr[0] == ']')
@@ -645,8 +640,8 @@
                     && (pattern_ptr[2] == ':')) {
                 SKIP_PATTERN(3); // for skip '][' in "][:"
                 SKIP_CMD(1);
-                leftFlag++;
-                rightFlag++;
+                //brackets++;
+                //brackets--;
             } else {
                 result = FALSE;
                 break;
@@ -655,13 +650,13 @@
             SKIP_PATTERN(pattern_sep_pos);
             if ((pattern_ptr[0] == ']') && (pattern_ptr[1] == ':')) {
                 SKIP_PATTERN(2); // for skip ']' in "]:" , pattern_ptr continue, while cmd_ptr remain unchanged
-                rightFlag++;
+                brackets--;
             } else if ((pattern_len > 2) && (pattern_ptr[0] == ']')
                     && (pattern_ptr[1] == '[')
                     && (pattern_ptr[2] == ':')) {
                 SKIP_PATTERN(3); // for skip ']' in "][:" , pattern_ptr continue, while cmd_ptr remain unchanged
-                leftFlag++;
-                rightFlag++;
+                //brackets++;
+                //brackets--;
             } else {
                 result = FALSE;
                 break;

--
Gitblit v1.9.1