diff options
Diffstat (limited to 'src/include/k5-json.h')
-rw-r--r-- | src/include/k5-json.h | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/include/k5-json.h b/src/include/k5-json.h index 42dcfa3d3..4b9b8fec3 100644 --- a/src/include/k5-json.h +++ b/src/include/k5-json.h @@ -93,13 +93,12 @@ k5_json_tid k5_json_get_tid(k5_json_value val); * decrement the refcount, possibly freeing the value. k5_json_retain returns * its argument and always succeeds. Both functions gracefully accept NULL. */ -void *k5_json_retain(k5_json_value val); +k5_json_value k5_json_retain(k5_json_value val); void k5_json_release(k5_json_value val); /* - * Unless otherwise specified, the following functions return NULL on error - * (generally only if out of memory) if they return a pointer type, or 0 on - * success and -1 on failure if they return int. + * If a k5_json_* function can fail, it returns 0 on success and an errno value + * on failure. */ /* @@ -108,7 +107,7 @@ void k5_json_release(k5_json_value val); typedef struct k5_json_null_st *k5_json_null; -k5_json_null k5_json_null_create(void); +int k5_json_null_create(k5_json_null *null_out); /* * Boolean @@ -116,7 +115,7 @@ k5_json_null k5_json_null_create(void); typedef struct k5_json_bool_st *k5_json_bool; -k5_json_bool k5_json_bool_create(int truth); +int k5_json_bool_create(int truth, k5_json_bool *val_out); int k5_json_bool_value(k5_json_bool bval); /* @@ -125,7 +124,7 @@ int k5_json_bool_value(k5_json_bool bval); typedef struct k5_json_array_st *k5_json_array; -k5_json_array k5_json_array_create(void); +int k5_json_array_create(k5_json_array *val_out); size_t k5_json_array_length(k5_json_array array); /* Both of these functions increment the reference count on val. */ @@ -144,7 +143,7 @@ typedef struct k5_json_object_st *k5_json_object; typedef void (*k5_json_object_iterator_fn)(void *arg, const char *key, k5_json_value val); -k5_json_object k5_json_object_create(void); +int k5_json_object_create(k5_json_object *val_out); void k5_json_object_iterate(k5_json_object obj, k5_json_object_iterator_fn func, void *arg); @@ -164,16 +163,19 @@ k5_json_value k5_json_object_get(k5_json_object obj, const char *key); typedef struct k5_json_string_st *k5_json_string; -k5_json_string k5_json_string_create(const char *string); -k5_json_string k5_json_string_create_len(const void *data, size_t len); +int k5_json_string_create(const char *cstring, k5_json_string *val_out); +int k5_json_string_create_len(const void *data, size_t len, + k5_json_string *val_out); const char *k5_json_string_utf8(k5_json_string string); + /* Create a base64 string value from binary data. */ -k5_json_string k5_json_string_create_base64(const void *data, size_t len); +int k5_json_string_create_base64(const void *data, size_t len, + k5_json_string *val_out); -/* Decode a base64 string. Returns NULL and *len_out == 0 if out of memory, - * NULL and *len == SIZE_MAX if string's contents aren't valid base64. */ -void *k5_json_string_unbase64(k5_json_string string, size_t *len_out); +/* Decode the base64 contents of string. */ +int k5_json_string_unbase64(k5_json_string string, unsigned char **data_out, + size_t *len_out); /* * Number @@ -181,14 +183,14 @@ void *k5_json_string_unbase64(k5_json_string string, size_t *len_out); typedef struct k5_json_number_st *k5_json_number; -k5_json_number k5_json_number_create(long long number); +int k5_json_number_create(long long number, k5_json_number *val_out); long long k5_json_number_value(k5_json_number number); /* * JSON encoding and decoding */ -char *k5_json_encode(k5_json_value val); -k5_json_value k5_json_decode(const char *str); +int k5_json_encode(k5_json_value val, char **json_out); +int k5_json_decode(const char *str, k5_json_value *val_out); #endif /* K5_JSON_H */ |