use the json to blobmsg library
authorFelix Fietkau <nbd@openwrt.org>
Sun, 6 Feb 2011 15:14:36 +0000 (16:14 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 6 Feb 2011 15:15:14 +0000 (16:15 +0100)
CMakeLists.txt
cli.c

index 504b65e63cc4aaf39fa214d72d1383af8b11b263..b791c7ca1a8335377c9d88004f9d49a8f97c3e8c 100644 (file)
@@ -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 6382a6c63341f97406ab5d649c9563271c1c0736..0af5b64630b1ad3ffae9c4f2643ec6fcf7a6928c 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -1,85 +1,8 @@
-#include <json/json.h>
+#include <libubox/blobmsg_json.h>
 #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;
                }