Due to a bug in mes/lib/abtol.c, hex number conversions fail for abtol, strtol, strtoul, strtoull, atoi, and abtod.
The variable m is set in order to adjust letter based digits but is not reset back to '0' for decimal digits.
The following patch fixes it:
--- mes-0.24/lib/mes/abtol.c.orig 2022-09-30 17:54:37.828219055 +0000
+++ mes-0.24/lib/mes/abtol.c 2022-09-30 17:55:12.768220259 +0000
@@ -44,6 +44,8 @@
i = i * base;
if (s[0] > '9')
m = 'a' - 10;
+ else
+ m = '0';
i = i + s[0] - m;
s = s + 1;
}
New tests for the problem:
--- mes-0.24/lib/tests/stdlib/70-strtoull.c.orig 2022-09-30 18:33:08.564298693 +0000
+++ mes-0.24/lib/tests/stdlib/70-strtoull.c 2022-09-30 18:33:50.120300125 +0000
@@ -43,5 +43,13 @@
if (strcmp (p, "zar\n"))
return 4;
+ p = "a2zar\n";
+ n = strtoull (p, (char **) &p, 16);
+ if (n != 162)
+ return 5;
+ eputs (p);
+ if (strcmp (p, "zar\n"))
+ return 6;
+
return 0;
}
--- mes-0.24/lib/tests/stdlib/90-strtol.c.orig 2022-09-30 18:33:14.240298888 +0000
+++ mes-0.24/lib/tests/stdlib/90-strtol.c 2022-09-30 18:35:14.820303044 +0000
@@ -28,17 +28,21 @@
if (strtol ("0x12", 0, 0) != 18)
1;
+ eputs ("0xa2\n");
+ if (strtol ("0xa2", 0, 0) != 162)
+ 2;
+
eputs ("012\n");
if (strtol ("012", 0, 0) != 10)
- 2;
+ 3;
eputs ("-1\n");
if (strtol ("-1", 0, 0) != -1)
- 3;
+ 4;
eputs ("-1\n");
if (strtoul ("-1", 0, 0) != -1)
- 4;
+ 5;
char *p = "16";
int n = strtol (p, (char **) &p, 0);
@@ -46,7 +50,7 @@
eputs (p);
eputs ("\n");
if (*p != 0)
- return 5;
+ return 6;
p = "0x12";
n = strtol (p, (char **) &p, 0);
@@ -54,7 +58,7 @@
eputs (p);
eputs ("\n");
if (*p != 0)
- return 5;
+ return 7;
return 0;
Regards,
Rick Masters