From 70de8cdde8021bccc764865ad7b255241155255f Mon Sep 17 00:00:00 2001 From: John-Mark Bell Date: Fri, 18 Jul 2014 15:51:12 +0100 Subject: Use the public API as it autoconverts types. Additionally, fix utterly bogus reference counting. --- src/html/html_select_element.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'src/html') diff --git a/src/html/html_select_element.c b/src/html/html_select_element.c index 7a5e84e..3d199bb 100644 --- a/src/html/html_select_element.c +++ b/src/html/html_select_element.c @@ -598,12 +598,14 @@ dom_exception dom_html_select_element_set_tab_index( dom_exception dom__html_select_element_add(dom_html_select_element *select, struct dom_html_element *ele, struct dom_html_element *before) { + dom_exception err; + dom_node *inserted; - return _dom_node_insert_before((dom_node_internal *)select, - (dom_node_internal *)ele, (dom_node_internal *)before, - (dom_node_internal **)&ele); - + err = dom_node_insert_before(select, ele, before, &inserted); + if (err == DOM_NO_ERR) + dom_node_unref(inserted); + return err; } dom_exception dom_html_select_element_remove(dom_html_select_element *ele, @@ -611,7 +613,8 @@ dom_exception dom_html_select_element_remove(dom_html_select_element *ele, { dom_exception err; uint32_t len; - dom_node *option; + dom_node *option, *old_option; + dom_html_options_collection *col; err = dom_html_select_element_get_length(ele, &len); if (err != DOM_NO_ERR) @@ -620,22 +623,26 @@ dom_exception dom_html_select_element_remove(dom_html_select_element *ele, /* Ensure index is in range */ if (index < 0 || index >= (int32_t)len) return DOM_NO_ERR; - dom_html_options_collection *col; err = _dom_html_select_element_make_collection(ele, &col); if (err != DOM_NO_ERR) return err; - err = dom_html_options_collection_item(col, - index, &option); - + err = dom_html_options_collection_item(col, index, &option); if (err != DOM_NO_ERR) { dom_html_options_collection_unref(col); return err; } - return _dom_node_remove_child(((dom_node_internal *)option)->parent, - (dom_node_internal *)option, - (dom_node_internal **)&option); + + err = dom_node_remove_child(dom_node_get_parent(option), + option, &old_option); + if (err == DOM_NO_ERR) + dom_node_unref(old_option); + + dom_node_unref(option); + dom_html_options_collection_unref(col); + + return err; } /** -- cgit v1.2.3