From 578704d5a4df0fc7001efe64a5abb343fd2f2b70 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sun, 5 Jan 2014 15:31:59 +0000 Subject: Remove a bunch of leaks but not reffing dom nodes from dom nodes --- src/html/html_form_element.c | 58 ++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 32 deletions(-) (limited to 'src/html/html_form_element.c') diff --git a/src/html/html_form_element.c b/src/html/html_form_element.c index 8ce94ab..fac717b 100644 --- a/src/html/html_form_element.c +++ b/src/html/html_form_element.c @@ -70,8 +70,6 @@ dom_exception _dom_html_form_element_initialise(struct dom_html_document *doc, doc->memoised[hds_FORM], namespace, prefix); - ele->col = NULL; - return err; } @@ -82,8 +80,6 @@ dom_exception _dom_html_form_element_initialise(struct dom_html_document *doc, */ void _dom_html_form_element_finalise(struct dom_html_form_element *ele) { - if (ele->col != NULL) - dom_html_collection_unref(ele->col); _dom_html_element_finalise(&ele->base); } @@ -144,23 +140,13 @@ dom_exception dom_html_form_element_get_elements(dom_html_form_element *ele, struct dom_html_collection **col) { dom_exception err; - - if (ele->col == NULL) { - dom_html_document *doc = (dom_html_document *) dom_node_get_owner(ele); - assert(doc != NULL); - err = _dom_html_collection_create(doc, - (dom_node_internal *) doc, - _dom_is_form_control, ele, col); - if (err != DOM_NO_ERR) - return err; - - ele->col = *col; - } - - *col = ele->col; - dom_html_collection_ref(*col); - - return DOM_NO_ERR; + dom_html_document *doc = (dom_html_document *) dom_node_get_owner(ele); + + assert(doc != NULL); + err = _dom_html_collection_create(doc, + (dom_node_internal *) doc, + _dom_is_form_control, ele, col); + return err; } /** @@ -174,18 +160,22 @@ dom_exception dom_html_form_element_get_length(dom_html_form_element *ele, uint32_t *len) { dom_exception err; + dom_html_document *doc = (dom_html_document *) dom_node_get_owner(ele); + dom_html_collection *col; + + assert(doc != NULL); + err = _dom_html_collection_create(doc, + (dom_node_internal *) doc, + _dom_is_form_control, ele, &col); + if (err != DOM_NO_ERR) + return err; - if (ele->col == NULL) { - dom_html_document *doc = (dom_html_document *) dom_node_get_owner(ele); - assert(doc != NULL); - err = _dom_html_collection_create(doc, - (dom_node_internal *) doc, - _dom_is_form_control, ele, &ele->col); - if (err != DOM_NO_ERR) - return err; - } - return dom_html_collection_get_length(ele->col, len); + err = dom_html_collection_get_length(col, len); + + dom_html_collection_unref(col); + + return err; } #define SIMPLE_GET_SET(attr) \ @@ -287,7 +277,11 @@ static bool _dom_is_form_control(struct dom_node_internal *node, void *ctx) assert(node->type == DOM_ELEMENT_NODE); - + + /* This should check the form of each element *AND* node that + * buttons leak the forms too! ARGH + */ + /* Form controls are INPUT TEXTAREA SELECT and BUTTON */ if (dom_string_caseless_isequal(node->name, doc->memoised[hds_INPUT])) -- cgit v1.2.3