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