{
char *end = NULL;
uint64_t val;
- errno = 1;
+ errno = 0;
while (*buf == ' ')
- {
buf++;
- }
if (*buf == '-')
- errno = 0;
+ return 1; /* error: uint cannot be negative */
val = strtoull(buf, &end, 10);
if (end != buf)
*retval = val;
- return ((errno == 0) || (end == buf)) ? 1 : 0;
+ return ((val == 0 && errno != 0) || (end == buf)) ? 1 : 0;
}
#ifndef HAVE_REALLOC
*/
JSON_EXPORT const char *json_util_get_last_err(void);
+/* these parsing helpers return zero on success */
JSON_EXPORT int json_parse_int64(const char *buf, int64_t *retval);
JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval);
JSON_EXPORT int json_parse_double(const char *buf, double *retval);
==========json_parse_uint64() test===========
buf=x parseit=1, value=666
buf=0 parseit=0, value=0
-buf=-0 parseit=1, value=0
+buf=-0 parseit=1, value=666
buf=00000000 parseit=0, value=0
-buf=-00000000 parseit=1, value=0
+buf=-00000000 parseit=1, value=666
buf=1 parseit=0, value=1
buf=2147483647 parseit=0, value=2147483647
-buf=-1 parseit=1, value=18446744073709551615
-buf=-9223372036854775808 parseit=1, value=9223372036854775808
+buf=-1 parseit=1, value=666
+buf=-9223372036854775808 parseit=1, value=666
buf= 1 parseit=0, value=1
buf=00001234 parseit=0, value=1234
buf=0001234x parseit=0, value=1234