X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fmasm_tools.h;h=453a038468230d718f3207cf80a441399d4fc459;hb=e27467d0d2681cc379c37c3fb7ad22ab9766fb2d;hp=cee4d62de69a3a509a71f9e87ff69825685c3943;hpb=d7f45365aab6cd0719b04b86243742b89fecb422;p=ia32rtools.git diff --git a/tools/masm_tools.h b/tools/masm_tools.h index cee4d62..453a038 100644 --- a/tools/masm_tools.h +++ b/tools/masm_tools.h @@ -1,9 +1,12 @@ -static unsigned long parse_number(const char *number) +#include +#include + +static uint64_t parse_number(const char *number, int is64) { int len = strlen(number); const char *p = number; char *endp = NULL; - unsigned long ret; + uint64_t ret; int neg = 0; int bad; @@ -13,23 +16,23 @@ static unsigned long parse_number(const char *number) } if (len > 1 && *p == '0') p++; + + errno = 0; if (number[len - 1] == 'h') { - ret = strtoul(p, &endp, 16); + ret = strtouq(p, &endp, 16); bad = (*endp != 'h'); } else { - ret = strtoul(p, &endp, 10); + ret = strtouq(p, &endp, 10); bad = (*endp != 0); } - if (bad) - aerr("number parsing failed (%s)\n", number); -#if __SIZEOF_LONG__ > 4 + if (errno != 0 || bad) + aerr("number parsing failed (%s): %d\n", number, errno); // if this happens, callers must be fixed too - if (ret > 0xfffffffful) + if (!is64 && ret > 0xfffffffful) aerr("number too large? (%s)\n", number); -#endif if (neg) { - if (ret > 0x7fffffff) + if (!is64 && ret > 0x7fffffff) aerr("too large negative? (%s)\n", number); ret = -ret; }