notaz.gp2x.de
/
ia32rtools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
more 32bit fixes
[ia32rtools.git]
/
tools
/
masm_tools.h
diff --git
a/tools/masm_tools.h
b/tools/masm_tools.h
index
cee4d62
..
453a038
100644
(file)
--- a/
tools/masm_tools.h
+++ b/
tools/masm_tools.h
@@
-1,9
+1,12
@@
-static unsigned long parse_number(const char *number)
+#include <errno.h>
+#include <stdint.h>
+
+static uint64_t parse_number(const char *number, int is64)
{
int len = strlen(number);
const char *p = number;
char *endp = NULL;
{
int len = strlen(number);
const char *p = number;
char *endp = NULL;
- u
nsigned long
ret;
+ u
int64_t
ret;
int neg = 0;
int bad;
int neg = 0;
int bad;
@@
-13,23
+16,23
@@
static unsigned long parse_number(const char *number)
}
if (len > 1 && *p == '0')
p++;
}
if (len > 1 && *p == '0')
p++;
+
+ errno = 0;
if (number[len - 1] == 'h') {
if (number[len - 1] == 'h') {
- ret = strtou
l
(p, &endp, 16);
+ ret = strtou
q
(p, &endp, 16);
bad = (*endp != 'h');
}
else {
bad = (*endp != 'h');
}
else {
- ret = strtou
l
(p, &endp, 10);
+ ret = strtou
q
(p, &endp, 10);
bad = (*endp != 0);
}
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 this happens, callers must be fixed too
- if (ret > 0xfffffffful)
+ if (
!is64 &&
ret > 0xfffffffful)
aerr("number too large? (%s)\n", number);
aerr("number too large? (%s)\n", number);
-#endif
if (neg) {
if (neg) {
- if (ret > 0x7fffffff)
+ if (
!is64 &&
ret > 0x7fffffff)
aerr("too large negative? (%s)\n", number);
ret = -ret;
}
aerr("too large negative? (%s)\n", number);
ret = -ret;
}