浏览代码

core: fixup helpers for numbers support hexadecimal format

Daniel-Constantin Mierla 3 周之前
父节点
当前提交
0baeb4ccad
共有 2 个文件被更改,包括 24 次插入8 次删除
  1. 9 2
      src/core/mod_fix.c
  2. 15 6
      src/core/sr_module.c

+ 9 - 2
src/core/mod_fix.c

@@ -174,11 +174,18 @@ int fixup_uint_uint(void **param, int param_no)
 
 	s.s = *param;
 	s.len = strlen(s.s);
-	if(likely(str2int(&s, &num) == 0)) {
+	if(s.len > 2 && s.s[0] == '0' && s.s[1] == 'x') {
+		if(hexstr2int(s.s, s.len, &num) < 0) {
+			/* not a hex number */
+			return E_UNSPEC;
+		}
 		*param = (void *)(long)num;
-	} else
+	} else if(likely(str2int(&s, &num) == 0)) {
+		*param = (void *)(long)num;
+	} else {
 		/* not a number */
 		return E_UNSPEC;
+	}
 	return 0;
 }
 

+ 15 - 6
src/core/sr_module.c

@@ -1241,13 +1241,22 @@ int fix_param(int type, void **param)
 		case FPARAM_INT:
 			s.s = (char *)*param;
 			s.len = strlen(s.s);
-			err = str2sint(&s, &num);
-			if(err == 0) {
-				p->v.i = (int)num;
+			if(s.len > 2 && s.s[0] == '0' && s.s[1] == 'x') {
+				if(hexstr2int(s.s, s.len, (unsigned int *)&num) < 0) {
+					/* not a hex number */
+					pkg_free(p);
+					return 1;
+				}
+				p->v.i = num;
 			} else {
-				/* Not a number */
-				pkg_free(p);
-				return 1;
+				err = str2sint(&s, &num);
+				if(err == 0) {
+					p->v.i = (int)num;
+				} else {
+					/* not a number */
+					pkg_free(p);
+					return 1;
+				}
 			}
 			p->fixed = (void *)(long)num;
 			break;