Commit 2a514976 authored by Jonathan Beck's avatar Jonathan Beck

Fix node length while parsing XML.

parent 3f0dfcf5
...@@ -75,7 +75,7 @@ plist_t plist_new_array() ...@@ -75,7 +75,7 @@ plist_t plist_new_array()
plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64_t length) plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64_t length)
{ {
//only structured types are allowed to have nulll value //only structured types are allowed to have nulll value
if (!value && (type == PLIST_DICT || type == PLIST_ARRAY)) { if (value || (!value && (type == PLIST_DICT || type == PLIST_ARRAY))) {
//now handle value //now handle value
plist_data_t data = plist_new_plist_data(); plist_data_t data = plist_new_plist_data();
data->type = type; data->type = type;
...@@ -91,6 +91,7 @@ plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64 ...@@ -91,6 +91,7 @@ plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64
case PLIST_REAL: case PLIST_REAL:
data->realval = *((double *) value); data->realval = *((double *) value);
break; break;
case PLIST_KEY:
case PLIST_STRING: case PLIST_STRING:
data->strval = strdup((char *) value); data->strval = strdup((char *) value);
break; break;
...@@ -209,15 +210,13 @@ void plist_get_type_and_value(plist_t node, plist_type * type, void *value, uint ...@@ -209,15 +210,13 @@ void plist_get_type_and_value(plist_t node, plist_type * type, void *value, uint
case PLIST_REAL: case PLIST_REAL:
*((double *) value) = data->realval; *((double *) value) = data->realval;
break; break;
case PLIST_KEY:
case PLIST_STRING: case PLIST_STRING:
*((char **) value) = strdup(data->strval); *((char **) value) = strdup(data->strval);
break; break;
case PLIST_UNICODE: case PLIST_UNICODE:
*((wchar_t **) value) = wcsdup(data->unicodeval); *((wchar_t **) value) = wcsdup(data->unicodeval);
break; break;
case PLIST_KEY:
*((char **) value) = strdup(data->strval);
break;
case PLIST_DATA: case PLIST_DATA:
case PLIST_ARRAY: case PLIST_ARRAY:
case PLIST_DICT: case PLIST_DICT:
......
...@@ -230,12 +230,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) ...@@ -230,12 +230,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
if (!xmlStrcmp(node->name, "true")) { if (!xmlStrcmp(node->name, "true")) {
data->boolval = 1; data->boolval = 1;
data->type = PLIST_BOOLEAN; data->type = PLIST_BOOLEAN;
data->length = 1;
continue; continue;
} }
if (!xmlStrcmp(node->name, "false")) { if (!xmlStrcmp(node->name, "false")) {
data->boolval = 0; data->boolval = 0;
data->type = PLIST_BOOLEAN; data->type = PLIST_BOOLEAN;
data->length = 1;
continue; continue;
} }
...@@ -243,6 +245,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) ...@@ -243,6 +245,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
char *strval = xmlNodeGetContent(node); char *strval = xmlNodeGetContent(node);
data->intval = g_ascii_strtoull(strval, NULL, 0); data->intval = g_ascii_strtoull(strval, NULL, 0);
data->type = PLIST_UINT; data->type = PLIST_UINT;
data->length = 8;
continue; continue;
} }
...@@ -250,6 +253,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) ...@@ -250,6 +253,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
char *strval = xmlNodeGetContent(node); char *strval = xmlNodeGetContent(node);
data->realval = atof(strval); data->realval = atof(strval);
data->type = PLIST_REAL; data->type = PLIST_REAL;
data->length = 8;
continue; continue;
} }
...@@ -259,12 +263,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) ...@@ -259,12 +263,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
if (!xmlStrcmp(node->name, "string")) { if (!xmlStrcmp(node->name, "string")) {
data->strval = strdup(xmlNodeGetContent(node)); data->strval = strdup(xmlNodeGetContent(node));
data->type = PLIST_STRING; data->type = PLIST_STRING;
data->length = strlen(data->strval);
continue; continue;
} }
if (!xmlStrcmp(node->name, "key")) { if (!xmlStrcmp(node->name, "key")) {
data->strval = strdup(xmlNodeGetContent(node)); data->strval = strdup(xmlNodeGetContent(node));
data->type = PLIST_KEY; data->type = PLIST_KEY;
data->length = strlen(data->strval);
continue; continue;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment