Add _nocheck functions

Added functions are:

* json_string_nocheck()
* json_string_set_nocheck()
* json_object_set_nocheck()
* json_object_set_new_nocheck()

These functions don't check that their string argument is valid UTF-8,
but assume that the user has already performed the check.
This commit is contained in:
Petri Lehtinen
2009-12-21 14:00:40 +02:00
parent 6637b976ed
commit dd2fe1ebe8
6 changed files with 121 additions and 12 deletions

View File

@@ -49,6 +49,7 @@ typedef struct {
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_real(double value);
json_t *json_true(void);
@@ -77,6 +78,7 @@ static inline void json_decref(json_t *json)
unsigned int json_object_size(const json_t *object);
json_t *json_object_get(const json_t *object, const char *key);
int json_object_set_new(json_t *object, const char *key, json_t *value);
int json_object_set_new_nocheck(json_t *object, const char *key, json_t *value);
int json_object_del(json_t *object, const char *key);
int json_object_clear(json_t *object);
int json_object_update(json_t *object, json_t *other);
@@ -91,6 +93,12 @@ int json_object_set(json_t *object, const char *key, json_t *value)
return json_object_set_new(object, key, json_incref(value));
}
static inline
int json_object_set_nocheck(json_t *object, const char *key, json_t *value)
{
return json_object_set_new_nocheck(object, key, json_incref(value));
}
unsigned int json_array_size(const json_t *array);
json_t *json_array_get(const json_t *array, unsigned int index);
int json_array_set_new(json_t *array, unsigned int index, json_t *value);
@@ -124,6 +132,7 @@ 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_real_set(json_t *real, double value);

View File

@@ -49,7 +49,4 @@ typedef struct {
#define json_to_real(json_) container_of(json_, json_real_t, json)
#define json_to_integer(json_) container_of(json_, json_integer_t, json)
int json_object_set_nocheck(json_t *json, const char *key, json_t *value);
json_t *json_string_nocheck(const char *value);
#endif

View File

@@ -120,11 +120,6 @@ int json_object_set_new_nocheck(json_t *json, const char *key, json_t *value)
return 0;
}
int json_object_set_nocheck(json_t *json, const char *key, json_t *value)
{
return json_object_set_new_nocheck(json, key, json_incref(value));
}
int json_object_set_new(json_t *json, const char *key, json_t *value)
{
if(!key || !utf8_check_string(key, -1))
@@ -508,14 +503,11 @@ const char *json_string_value(const json_t *json)
return json_to_string(json)->value;
}
int json_string_set(json_t *json, const char *value)
int json_string_set_nocheck(json_t *json, const char *value)
{
char *dup;
json_string_t *string;
if(!json_is_string(json) || !value || !utf8_check_string(value, -1))
return -1;
dup = strdup(value);
if(!dup)
return -1;
@@ -527,6 +519,14 @@ int json_string_set(json_t *json, const char *value)
return 0;
}
int json_string_set(json_t *json, const char *value)
{
if(!value || !utf8_check_string(value, -1))
return -1;
return json_string_set_nocheck(json, value);
}
static void json_delete_string(json_string_t *string)
{
free(string->value);