Change JSON integer's underlying type from int to long

This is a backwards incompatible change.
This commit is contained in:
Petri Lehtinen
2010-08-10 21:45:18 +03:00
parent 68f2861e92
commit 014c49c285
7 changed files with 20 additions and 20 deletions

View File

@@ -185,7 +185,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,
char buffer[MAX_INTEGER_STR_LENGTH];
int size;
size = snprintf(buffer, MAX_INTEGER_STR_LENGTH, "%d", json_integer_value(json));
size = snprintf(buffer, MAX_INTEGER_STR_LENGTH, "%li", json_integer_value(json));
if(size >= MAX_INTEGER_STR_LENGTH)
return -1;

View File

@@ -54,7 +54,7 @@ json_t *json_object(void);
json_t *json_array(void);
json_t *json_string(const char *value);
json_t *json_string_nocheck(const char *value);
json_t *json_integer(int value);
json_t *json_integer(long value);
json_t *json_real(double value);
json_t *json_true(void);
json_t *json_false(void);
@@ -141,13 +141,13 @@ int json_array_insert(json_t *array, size_t index, json_t *value)
}
const char *json_string_value(const json_t *string);
int json_integer_value(const json_t *integer);
long json_integer_value(const json_t *integer);
double json_real_value(const json_t *real);
double json_number_value(const json_t *json);
int json_string_set(json_t *string, const char *value);
int json_string_set_nocheck(json_t *string, const char *value);
int json_integer_set(json_t *integer, int value);
int json_integer_set(json_t *integer, long value);
int json_real_set(json_t *real, double value);

View File

@@ -41,7 +41,7 @@ typedef struct {
typedef struct {
json_t json;
int value;
long value;
} json_integer_t;
#define json_to_object(json_) container_of(json_, json_object_t, json)

View File

@@ -52,7 +52,7 @@ typedef struct {
int line, column;
union {
char *string;
int integer;
long integer;
double real;
} value;
} lex_t;
@@ -438,17 +438,17 @@ static int lex_scan_number(lex_t *lex, char c, json_error_t *error)
value = strtol(saved_text, &end, 10);
assert(end == saved_text + lex->saved_text.length);
if((value == LONG_MAX && errno == ERANGE) || value > INT_MAX) {
if(value == LONG_MAX && errno == ERANGE) {
error_set(error, lex, "too big integer");
goto out;
}
else if((value == LONG_MIN && errno == ERANGE) || value < INT_MIN) {
else if(value == LONG_MIN && errno == ERANGE) {
error_set(error, lex, "too big negative integer");
goto out;
}
lex->token = TOKEN_INTEGER;
lex->value.integer = (int)value;
lex->value.integer = value;
return 0;
}

View File

@@ -725,7 +725,7 @@ static json_t *json_string_copy(json_t *string)
/*** integer ***/
json_t *json_integer(int value)
json_t *json_integer(long value)
{
json_integer_t *integer = malloc(sizeof(json_integer_t));
if(!integer)
@@ -736,7 +736,7 @@ json_t *json_integer(int value)
return &integer->json;
}
int json_integer_value(const json_t *json)
long json_integer_value(const json_t *json)
{
if(!json_is_integer(json))
return 0;
@@ -744,7 +744,7 @@ int json_integer_value(const json_t *json)
return json_to_integer(json)->value;
}
int json_integer_set(json_t *json, int value)
int json_integer_set(json_t *json, long value)
{
if(!json_is_integer(json))
return -1;