From 28539278b5a0a73a81723d2cbf53e7e34d9850c8 Mon Sep 17 00:00:00 2001 From: Arun Muthusamy <arun.muthusamy@inteno.se> Date: Thu, 7 Jun 2018 15:21:26 +0200 Subject: [PATCH] return json from xmltojson converter --- common.c | 34 ++++++++++++++++++++++++++-------- common.h | 9 +++++---- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/common.c b/common.c index 9a77177..d0dd10b 100644 --- a/common.c +++ b/common.c @@ -102,10 +102,10 @@ leave: return NULL; } -void xml_to_json(xmlNode *anode, json_object *jobj) +void xml_to_json(xmlNode *anode, struct json_object *jobj) { xmlNodePtr cur_node = NULL; - json_object *cur_jstr = NULL; + struct json_object *cur_jstr = NULL; for (cur_node = anode; cur_node; cur_node = cur_node->next) { debug_print("child address: %p\n", cur_node); @@ -127,21 +127,39 @@ void xml_to_json(xmlNode *anode, json_object *jobj) } } -void xml_to_json_converter(struct write_result *result) +//free memory... +struct json_object *xml_to_json_converter(struct write_result *result) { - json_object *jobj; + struct json_object *jobj; xmlDocPtr doc_ptr = NULL; xmlNode *origin_node = NULL; - jobj = json_object_new_object(); - doc_ptr = xmlParseMemory(result->data, result->pos); - origin_node = doc_ptr ? xmlDocGetRootElement(doc_ptr) : NULL; + if (!doc_ptr) + goto fail_doc_ptr; + + origin_node = xmlDocGetRootElement(doc_ptr); + if (!origin_node) + goto fail_origin_node; jobj = json_object_new_object(); xml_to_json(origin_node, jobj); debug_print("The json object created: %s\n", json_object_to_json_string(jobj)); + + if (doc_ptr) + xmlFreeDoc(doc_ptr); + if (origin_node) + free (origin_node); + + return jobj; + +fail_origin_node: + if (doc_ptr) + xmlFreeDoc(doc_ptr); +fail_doc_ptr: + return NULL; + } int isdigits(const char *pin) @@ -233,4 +251,4 @@ int check_response(struct json_object *response) return 0; fail: return -1; -} \ No newline at end of file +} diff --git a/common.h b/common.h index 865417f..9433651 100644 --- a/common.h +++ b/common.h @@ -23,8 +23,8 @@ #include <libxml/xpath.h> #include <libxml/xpathInternals.h> -//#include "libmobile_hilink.h" -#include "libmobile_zte.h" +#include "libmobile_hilink.h" +//#include "libmobile_zte.h" extern int debug; extern char *global_ip_addr; @@ -35,7 +35,7 @@ extern struct ubus_context *global_ctx; if (debug) \ fprintf(stderr, __VA_ARGS__); \ } while (0) - +/* #define TAG_CONTENT_SIZE 100 struct write_result @@ -43,6 +43,7 @@ struct write_result char *data; int pos; }; +*/ char *get_ip(char *if_name); /** @@ -76,7 +77,7 @@ int print_to_ubus(struct json_object *parsed_response, struct ubus_context *ctx, struct blob_buf json_to_blob(struct json_object *response, struct blob_buf bb); char *xml_parser(struct write_result *result, char *tag); -void xml_to_json_converter(struct write_result *result); +struct json_object *xml_to_json_converter(struct write_result *result); int isdigits(const char *pin); int validate_puk_format(char *puk); int validate_pin_format(char *pin); -- GitLab