diff --git a/CMakeLists.txt b/CMakeLists.txt index 504b65e..b791c7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ TARGET_LINK_LIBRARIES(ubusd ubox) ADD_EXECUTABLE(cli cli.c) SET_TARGET_PROPERTIES(cli PROPERTIES OUTPUT_NAME ubus) -TARGET_LINK_LIBRARIES(cli ubus ubox json) +TARGET_LINK_LIBRARIES(cli ubus ubox blobmsg_json json) ADD_EXECUTABLE(ubus-example ubus-example.c) TARGET_LINK_LIBRARIES(ubus-example ubus ubox) diff --git a/cli.c b/cli.c index 6382a6c..0af5b64 100644 --- a/cli.c +++ b/cli.c @@ -1,85 +1,8 @@ -#include +#include #include "libubus.h" static struct blob_buf b; - -static bool blobmsg_add_element(struct blob_buf *b, const char *name, json_object *obj); - -static bool blobmsg_add_object(struct blob_buf *b, json_object *obj) -{ - json_object_object_foreach(obj, key, val) { - if (!blobmsg_add_element(b, key, val)) - return false; - } - return true; -} - -static bool blobmsg_add_array(struct blob_buf *b, struct array_list *a) -{ - int i, len; - - for (i = 0, len = array_list_length(a); i < len; i++) { - if (!blobmsg_add_element(b, NULL, array_list_get_idx(a, i))) - return false; - } - - return true; -} - -static bool blobmsg_add_element(struct blob_buf *b, const char *name, json_object *obj) -{ - bool ret = true; - void *c; - - if (!obj) - return false; - - switch (json_object_get_type(obj)) { - case json_type_object: - c = blobmsg_open_table(b, name); - ret = blobmsg_add_object(b, obj); - blobmsg_close_table(b, c); - break; - case json_type_array: - c = blobmsg_open_array(b, name); - ret = blobmsg_add_array(b, json_object_get_array(obj)); - blobmsg_close_array(b, c); - break; - case json_type_string: - blobmsg_add_string(b, name, json_object_get_string(obj)); - break; - case json_type_boolean: - blobmsg_add_u8(b, name, json_object_get_boolean(obj)); - break; - case json_type_int: - blobmsg_add_u32(b, name, json_object_get_int(obj)); - break; - default: - return false; - } - return ret; -} - -static bool blobmsg_from_json(struct blob_buf *b, const char *str) -{ - json_object *obj; - bool ret = false; - - obj = json_tokener_parse(str); - if (is_error(obj)) - return false; - - if (json_object_get_type(obj) != json_type_object) - goto out; - - ret = blobmsg_add_object(b, obj); - -out: - json_object_put(obj); - return ret; -} - static void receive_lookup(struct ubus_context *ctx, struct ubus_object_data *obj, void *priv) { struct blob_attr *cur; @@ -200,7 +123,7 @@ int main(int argc, char **argv) return usage(argv[0]); blob_buf_init(&b, 0); - if (argc == 5 && !blobmsg_from_json(&b, argv[4])) { + if (argc == 5 && !blobmsg_add_json_from_string(&b, argv[4])) { fprintf(stderr, "Failed to parse message data\n"); goto out; }