Skip to content

Commit

Permalink
Make internal JSON functions return error codes
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
greghudson committed Feb 13, 2013
1 parent 884e040 commit 61116eb
Show file tree
Hide file tree
Showing 9 changed files with 546 additions and 464 deletions.
36 changes: 19 additions & 17 deletions src/include/k5-json.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/

/*
Expand All @@ -108,15 +107,15 @@ 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
*/

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);

/*
Expand All @@ -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. */
Expand All @@ -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);

Expand All @@ -164,31 +163,34 @@ 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
*/

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 */

0 comments on commit 61116eb

Please sign in to comment.