summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plist.c7
-rw-r--r--src/xplist.c6
2 files changed, 9 insertions, 4 deletions
diff --git a/src/plist.c b/src/plist.c
index 81cdfc5..1fafd94 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -75,7 +75,7 @@ plist_t plist_new_array()
75plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64_t length) 75plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64_t length)
76{ 76{
77 //only structured types are allowed to have nulll value 77 //only structured types are allowed to have nulll value
78 if (!value && (type == PLIST_DICT || type == PLIST_ARRAY)) { 78 if (value || (!value && (type == PLIST_DICT || type == PLIST_ARRAY))) {
79 //now handle value 79 //now handle value
80 plist_data_t data = plist_new_plist_data(); 80 plist_data_t data = plist_new_plist_data();
81 data->type = type; 81 data->type = type;
@@ -91,6 +91,7 @@ plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64
91 case PLIST_REAL: 91 case PLIST_REAL:
92 data->realval = *((double *) value); 92 data->realval = *((double *) value);
93 break; 93 break;
94 case PLIST_KEY:
94 case PLIST_STRING: 95 case PLIST_STRING:
95 data->strval = strdup((char *) value); 96 data->strval = strdup((char *) value);
96 break; 97 break;
@@ -209,15 +210,13 @@ void plist_get_type_and_value(plist_t node, plist_type * type, void *value, uint
209 case PLIST_REAL: 210 case PLIST_REAL:
210 *((double *) value) = data->realval; 211 *((double *) value) = data->realval;
211 break; 212 break;
213 case PLIST_KEY:
212 case PLIST_STRING: 214 case PLIST_STRING:
213 *((char **) value) = strdup(data->strval); 215 *((char **) value) = strdup(data->strval);
214 break; 216 break;
215 case PLIST_UNICODE: 217 case PLIST_UNICODE:
216 *((wchar_t **) value) = wcsdup(data->unicodeval); 218 *((wchar_t **) value) = wcsdup(data->unicodeval);
217 break; 219 break;
218 case PLIST_KEY:
219 *((char **) value) = strdup(data->strval);
220 break;
221 case PLIST_DATA: 220 case PLIST_DATA:
222 case PLIST_ARRAY: 221 case PLIST_ARRAY:
223 case PLIST_DICT: 222 case PLIST_DICT:
diff --git a/src/xplist.c b/src/xplist.c
index 6c27375..9a5698c 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -230,12 +230,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
230 if (!xmlStrcmp(node->name, "true")) { 230 if (!xmlStrcmp(node->name, "true")) {
231 data->boolval = 1; 231 data->boolval = 1;
232 data->type = PLIST_BOOLEAN; 232 data->type = PLIST_BOOLEAN;
233 data->length = 1;
233 continue; 234 continue;
234 } 235 }
235 236
236 if (!xmlStrcmp(node->name, "false")) { 237 if (!xmlStrcmp(node->name, "false")) {
237 data->boolval = 0; 238 data->boolval = 0;
238 data->type = PLIST_BOOLEAN; 239 data->type = PLIST_BOOLEAN;
240 data->length = 1;
239 continue; 241 continue;
240 } 242 }
241 243
@@ -243,6 +245,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
243 char *strval = xmlNodeGetContent(node); 245 char *strval = xmlNodeGetContent(node);
244 data->intval = g_ascii_strtoull(strval, NULL, 0); 246 data->intval = g_ascii_strtoull(strval, NULL, 0);
245 data->type = PLIST_UINT; 247 data->type = PLIST_UINT;
248 data->length = 8;
246 continue; 249 continue;
247 } 250 }
248 251
@@ -250,6 +253,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
250 char *strval = xmlNodeGetContent(node); 253 char *strval = xmlNodeGetContent(node);
251 data->realval = atof(strval); 254 data->realval = atof(strval);
252 data->type = PLIST_REAL; 255 data->type = PLIST_REAL;
256 data->length = 8;
253 continue; 257 continue;
254 } 258 }
255 259
@@ -259,12 +263,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node)
259 if (!xmlStrcmp(node->name, "string")) { 263 if (!xmlStrcmp(node->name, "string")) {
260 data->strval = strdup(xmlNodeGetContent(node)); 264 data->strval = strdup(xmlNodeGetContent(node));
261 data->type = PLIST_STRING; 265 data->type = PLIST_STRING;
266 data->length = strlen(data->strval);
262 continue; 267 continue;
263 } 268 }
264 269
265 if (!xmlStrcmp(node->name, "key")) { 270 if (!xmlStrcmp(node->name, "key")) {
266 data->strval = strdup(xmlNodeGetContent(node)); 271 data->strval = strdup(xmlNodeGetContent(node));
267 data->type = PLIST_KEY; 272 data->type = PLIST_KEY;
273 data->length = strlen(data->strval);
268 continue; 274 continue;
269 } 275 }
270 276