Commit 3f0dfcf5 authored by Jonathan Beck's avatar Jonathan Beck

complete find function to take length into account.

parent c39685d3
...@@ -60,7 +60,7 @@ plist_t plist_get_first_child(plist_t node); ...@@ -60,7 +60,7 @@ plist_t plist_get_first_child(plist_t node);
plist_t plist_get_next_sibling(plist_t node); plist_t plist_get_next_sibling(plist_t node);
plist_t plist_get_prev_sibling(plist_t node); plist_t plist_get_prev_sibling(plist_t node);
plist_t plist_find_node(plist_t plist, plist_type type, void *value); plist_t plist_find_node(plist_t plist, plist_type type, void *value, uint64_t length);
void plist_get_type_and_value(plist_t node, plist_type * type, void *value, uint64_t * length); void plist_get_type_and_value(plist_t node, plist_type * type, void *value, uint64_t * length);
//import and export functions //import and export functions
......
...@@ -135,7 +135,7 @@ plist_t plist_get_prev_sibling(plist_t node) ...@@ -135,7 +135,7 @@ plist_t plist_get_prev_sibling(plist_t node)
return (plist_t) g_node_prev_sibling((GNode *) node); return (plist_t) g_node_prev_sibling((GNode *) node);
} }
char compare_node_value(plist_type type, plist_data_t data, void *value) char compare_node_value(plist_type type, plist_data_t data, void *value, uint64_t length)
{ {
char res = FALSE; char res = FALSE;
switch (type) { switch (type) {
...@@ -156,7 +156,7 @@ char compare_node_value(plist_type type, plist_data_t data, void *value) ...@@ -156,7 +156,7 @@ char compare_node_value(plist_type type, plist_data_t data, void *value)
res = !wcscmp(data->unicodeval, ((wchar_t *) value)); res = !wcscmp(data->unicodeval, ((wchar_t *) value));
break; break;
case PLIST_DATA: case PLIST_DATA:
res = !strcmp(data->buff, ((char *) value)); res = memcmp(data->buff,(char*) value, length );
break; break;
case PLIST_ARRAY: case PLIST_ARRAY:
case PLIST_DICT: case PLIST_DICT:
...@@ -167,7 +167,7 @@ char compare_node_value(plist_type type, plist_data_t data, void *value) ...@@ -167,7 +167,7 @@ char compare_node_value(plist_type type, plist_data_t data, void *value)
return res; return res;
} }
plist_t plist_find_node(plist_t plist, plist_type type, void *value) plist_t plist_find_node(plist_t plist, plist_type type, void *value, uint64_t length)
{ {
if (!plist) if (!plist)
return NULL; return NULL;
...@@ -177,11 +177,11 @@ plist_t plist_find_node(plist_t plist, plist_type type, void *value) ...@@ -177,11 +177,11 @@ plist_t plist_find_node(plist_t plist, plist_type type, void *value)
plist_data_t data = plist_get_data(current); plist_data_t data = plist_get_data(current);
if (data->type == type && compare_node_value(type, data, value)) { if (data->type == type && data->length == length && compare_node_value(type, data, value, length)) {
return current; return current;
} }
if (data->type == PLIST_DICT || data->type == PLIST_ARRAY) { if (data->type == PLIST_DICT || data->type == PLIST_ARRAY) {
plist_t sub = plist_find_node(current, type, value); plist_t sub = plist_find_node(current, type, value, length);
if (sub) if (sub)
return sub; return sub;
} }
......
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