Browse Source

- fixed error reported by Juha Heinanen

Jan Janak 20 years ago
parent
commit
b529f4b8dd
1 changed files with 7 additions and 4 deletions
  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 {