@@ -245,19 +245,17 @@ int json_parse_uint64(const char *buf, uint64_t *retval)
|
|||||||
{
|
{
|
||||||
char *end = NULL;
|
char *end = NULL;
|
||||||
uint64_t val;
|
uint64_t val;
|
||||||
errno = 1;
|
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
while (*buf == ' ')
|
while (*buf == ' ')
|
||||||
{
|
|
||||||
buf++;
|
buf++;
|
||||||
}
|
|
||||||
if (*buf == '-')
|
if (*buf == '-')
|
||||||
errno = 0;
|
return 1; /* error: uint cannot be negative */
|
||||||
|
|
||||||
val = strtoull(buf, &end, 10);
|
val = strtoull(buf, &end, 10);
|
||||||
if (end != buf)
|
if (end != buf)
|
||||||
*retval = val;
|
*retval = val;
|
||||||
return ((errno == 0) || (end == buf)) ? 1 : 0;
|
return ((val == 0 && errno != 0) || (end == buf)) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_REALLOC
|
#ifndef HAVE_REALLOC
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ JSON_EXPORT int json_object_to_fd(int fd, struct json_object *obj, int flags);
|
|||||||
*/
|
*/
|
||||||
JSON_EXPORT const char *json_util_get_last_err(void);
|
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_int64(const char *buf, int64_t *retval);
|
||||||
JSON_EXPORT int json_parse_uint64(const char *buf, uint64_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_EXPORT int json_parse_double(const char *buf, double *retval);
|
||||||
|
|||||||
@@ -34,13 +34,13 @@ buf=123 parseit=0, value=123
|
|||||||
==========json_parse_uint64() test===========
|
==========json_parse_uint64() test===========
|
||||||
buf=x parseit=1, value=666
|
buf=x parseit=1, value=666
|
||||||
buf=0 parseit=0, value=0
|
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=0, value=0
|
||||||
buf=-00000000 parseit=1, value=0
|
buf=-00000000 parseit=1, value=666
|
||||||
buf=1 parseit=0, value=1
|
buf=1 parseit=0, value=1
|
||||||
buf=2147483647 parseit=0, value=2147483647
|
buf=2147483647 parseit=0, value=2147483647
|
||||||
buf=-1 parseit=1, value=18446744073709551615
|
buf=-1 parseit=1, value=666
|
||||||
buf=-9223372036854775808 parseit=1, value=9223372036854775808
|
buf=-9223372036854775808 parseit=1, value=666
|
||||||
buf= 1 parseit=0, value=1
|
buf= 1 parseit=0, value=1
|
||||||
buf=00001234 parseit=0, value=1234
|
buf=00001234 parseit=0, value=1234
|
||||||
buf=0001234x parseit=0, value=1234
|
buf=0001234x parseit=0, value=1234
|
||||||
|
|||||||
Reference in New Issue
Block a user