summaryrefslogtreecommitdiffstats
path: root/src/include/k5-json.h
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2012-10-30 17:17:45 -0400
committerGreg Hudson <ghudson@mit.edu>2013-02-13 15:53:29 -0500
commit61116eb28a7520dda1e5febba95ac6ba1e70e6ac (patch)
treeb97891027d346557b73ee82c02e562687ec400b2 /src/include/k5-json.h
parent884e040c0478c94585395a03dfbb0bbdee7c5ed4 (diff)
downloadkrb5-61116eb28a7520dda1e5febba95ac6ba1e70e6ac.tar.gz
krb5-61116eb28a7520dda1e5febba95ac6ba1e70e6ac.tar.xz
krb5-61116eb28a7520dda1e5febba95ac6ba1e70e6ac.zip
Make internal JSON functions return error codes
Return error codes (0, ENOMEM, or EINVAL) from JSON support functions instead of returning results directly. This makes error handling simpler for functions which assemble JSON objects and then return a krb5_error_code values. Adjust all callers. Use shims in export_cred.c to minimize changes there; it will be redesigned internally in a subsequent commit.
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 */