summaryrefslogtreecommitdiffstats
path: root/src/include/k5-json.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/k5-json.h')
-rw-r--r--src/include/k5-json.h36
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 */