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