Browse Source

Provide a macro helper for json_pack that checks the return value and describes what the error is and where it came from

master
Con Kolivas 10 years ago
parent
commit
67f6a0148c
  1. 10
      src/libckpool.c
  2. 11
      src/libckpool.h

10
src/libckpool.c

@ -933,6 +933,16 @@ out:
} }
void _json_check(json_t *val, json_error_t *err, const char *file, const char *func, const int line)
{
if (likely(val))
return;
LOGERR("Invalid json line:%d col:%d pos:%d text: %s from %s %s:%d",
err->line, err->column, err->position, err->text,
file, func, line);
}
/* Extracts a string value from a json array with error checking. To be used /* Extracts a string value from a json array with error checking. To be used
* when the value of the string returned is only examined and not to be stored. * when the value of the string returned is only examined and not to be stored.
* See json_array_string below */ * See json_array_string below */

11
src/libckpool.h

@ -266,6 +266,17 @@ typedef struct unixsock unixsock_t;
typedef struct proc_instance proc_instance_t; typedef struct proc_instance proc_instance_t;
void _json_check(json_t *val, json_error_t *err, const char *file, const char *func, const int line);
#define json_check(val, err) _json_check(val, err, __FILE__, __func__, __LINE__)
/* Check and pack json */
#define JSON_CPACK(val, ...) do { \
json_error_t err; \
val = json_pack_ex(&err, 0, ##__VA_ARGS__); \
json_check(val, &err); \
} while (0)
/* No error checking with these, make sure we know they're valid already! */ /* No error checking with these, make sure we know they're valid already! */
static inline void json_strcpy(char *buf, json_t *val, const char *key) static inline void json_strcpy(char *buf, json_t *val, const char *key)
{ {

Loading…
Cancel
Save