1
0
mirror of https://github.com/rkd77/elinks.git synced 2025-02-02 15:09:23 -05:00

DOM: Fix get_dom_node_map_index() so it returns the correct ordered index

This was cause by the recent change to allocate string during incremental
parsing where the node string was set after insertion. Test for this in the
works.

Fixes: b6b6d3c67e16da25565b4a3a9a76abf2fbc1bb3c
This commit is contained in:
Jonas Fonseca 2006-01-30 06:02:02 +01:00 committed by Jonas Fonseca
parent f268d0c495
commit ea675cbb6e

View File

@ -190,7 +190,8 @@ dom_node_list_bsearch(struct dom_node_search *search, struct dom_node_list *list
return NULL; return NULL;
} }
int get_dom_node_map_index(struct dom_node_list *list, struct dom_node *node) int
get_dom_node_map_index(struct dom_node_list *list, struct dom_node *node)
{ {
struct dom_node_search search = INIT_DOM_NODE_SEARCH(node, list); struct dom_node_search search = INIT_DOM_NODE_SEARCH(node, list);
struct dom_node *match = dom_node_list_bsearch(&search, list); struct dom_node *match = dom_node_list_bsearch(&search, list);
@ -327,6 +328,23 @@ init_dom_node_(unsigned char *file, int line,
node->type = type; node->type = type;
node->parent = parent; node->parent = parent;
/* Make it possible to add a node to a parent without allocating the
* strings. */
if (allocated >= 0) {
node->allocated = !!allocated;
} else if (parent) {
node->allocated = parent->allocated;
}
if (node->allocated) {
if (!init_dom_string(&node->string, string->string, string->length)) {
done_dom_node(node);
return NULL;
}
} else {
copy_dom_string(&node->string, string);
}
if (parent) { if (parent) {
struct dom_node_list **list = get_dom_node_list(parent, node); struct dom_node_list **list = get_dom_node_list(parent, node);
int sort = (type == DOM_NODE_ATTRIBUTE); int sort = (type == DOM_NODE_ATTRIBUTE);
@ -342,22 +360,6 @@ init_dom_node_(unsigned char *file, int line,
done_dom_node(node); done_dom_node(node);
return NULL; return NULL;
} }
/* Make it possible to add a node to a parent without
* allocating the strings. */
node->allocated = allocated < 0 ? parent->allocated : !!allocated;
} else if (allocated >= 0) {
node->allocated = !!allocated;
}
if (node->allocated) {
if (!init_dom_string(&node->string, string->string, string->length)) {
done_dom_node(node);
return NULL;
}
} else {
copy_dom_string(&node->string, string);
} }
return node; return node;