浏览代码

- fixed error reported by Juha Heinanen

Jan Janak 20 年之前
父节点
当前提交
b529f4b8dd
共有 1 个文件被更改,包括 7 次插入4 次删除
  1. 7 4
      qvalue.c

+ 7 - 4
qvalue.c

@@ -40,7 +40,7 @@
  */
 int str2q(qvalue_t* q, char* s, int len)
 {
-	int i, digits;
+	int i, digits, order;
 
 	     /* States and equivalent regular expressions of input */
 	enum {
@@ -58,6 +58,7 @@ int str2q(qvalue_t* q, char* s, int len)
 	}
 
 	digits = 1;
+	order = 100;
 	for(i = 0; i < len; i++) {
 		switch(state) {
 		case ST_START:
@@ -123,7 +124,8 @@ int str2q(qvalue_t* q, char* s, int len)
 
 		case ST_0_PT:
 			if (s[i] >= '0' && s[i] <= '9') {
-				*q =  s[i] - '0';
+				*q =  (s[i] - '0') * order;
+				order /= 10;
 				state = ST_0_PT_N;
 			} else {
 				return E_Q_INV_CHAR;
@@ -156,8 +158,9 @@ int str2q(qvalue_t* q, char* s, int len)
 
 		case ST_0_PT_N:
 			if (s[i] >= '0' && s[i] <= '9') {
-				if (digits < 3) {
-					*q = *q * 10 + s[i] - '0';
+				if (digits <= 3) {
+					*q += (s[i] - '0') * order;
+					order /= 10;
 					digits++;
 				}
 			} else {