32bit fixes
[ia32rtools.git] / tools / masm_tools.h
CommitLineData
054f95b2 1static unsigned long parse_number(const char *number)
2{
3 int len = strlen(number);
4 const char *p = number;
5 char *endp = NULL;
6 unsigned long ret;
7 int neg = 0;
8 int bad;
9
10 if (*p == '-') {
11 neg = 1;
12 p++;
13 }
14 if (len > 1 && *p == '0')
15 p++;
16 if (number[len - 1] == 'h') {
17 ret = strtoul(p, &endp, 16);
18 bad = (*endp != 'h');
19 }
20 else {
21 ret = strtoul(p, &endp, 10);
22 bad = (*endp != 0);
23 }
24 if (bad)
25 aerr("number parsing failed (%s)\n", number);
421216a1 26#if __SIZEOF_LONG__ > 4
27 // if this happens, callers must be fixed too
28 if (ret > 0xfffffffful)
29 aerr("number too large? (%s)\n", number);
30#endif
31 if (neg) {
32 if (ret > 0x7fffffff)
33 aerr("too large negative? (%s)\n", number);
054f95b2 34 ret = -ret;
421216a1 35 }
054f95b2 36 return ret;
37}
38