diff --git a/common.c b/common.c index 9a77177987203eada2edd608c8fcd2eb04c6c10d..d0dd10b02f799b257be12c1261771e9e72072031 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 865417fa12fe5738b5c23d833c6445297697a0f1..94336510d72a0637af36bf282f620cfab2c17039 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);