44 lines
674 B
C
44 lines
674 B
C
#include "int.h"
|
|
|
|
unsigned long parse_u32(const char *s, int *ok) {
|
|
unsigned long value = 0;
|
|
*ok = 0;
|
|
|
|
if (!s || *s == '\0') {
|
|
return 0;
|
|
}
|
|
|
|
while (*s) {
|
|
if (*s < '0' || *s > '9') {
|
|
return 0;
|
|
}
|
|
|
|
value = value * 10UL + (unsigned long)(*s - '0');
|
|
++s;
|
|
}
|
|
|
|
*ok = 1;
|
|
return value;
|
|
}
|
|
|
|
long parse_i32(const char *s, int *ok) {
|
|
int sign = 1;
|
|
unsigned long v;
|
|
|
|
if (!s || *s == '\0') {
|
|
*ok = 0;
|
|
return 0;
|
|
}
|
|
|
|
if (*s == '-') {
|
|
sign = -1;
|
|
++s;
|
|
}
|
|
|
|
v = parse_u32(s, ok);
|
|
if (!*ok) {
|
|
return 0;
|
|
}
|
|
|
|
return (long)v * (long)sign;
|
|
} |