diff options
author | Michael Drake <michael.drake@codethink.co.uk> | 2016-02-05 20:31:46 +0000 |
---|---|---|
committer | Michael Drake <michael.drake@codethink.co.uk> | 2016-02-05 20:31:46 +0000 |
commit | 68c446328f2d874384b2d7ca6afb42b9d7fe4a17 (patch) | |
tree | fe7e75b5deb3fcf3d1b2864f962ffa2117480eef | |
parent | e9257f8c49dacf49feebad32780ffb7e6a7f013c (diff) | |
parent | d19eda00d250fae4b18ce41c941e709d7d384ff5 (diff) | |
download | libdom-68c446328f2d874384b2d7ca6afb42b9d7fe4a17.tar.gz |
Merge branch 'tlsa/fix-html-element-copy-constructors'
108 files changed, 2263 insertions, 202 deletions
diff --git a/src/core/element.c b/src/core/element.c index a86dc651..bbf4c2b1 100644 --- a/src/core/element.c +++ b/src/core/element.c @@ -1515,51 +1515,70 @@ void __dom_element_destroy(struct dom_node_internal *node) * are all specified. For the methods like importNode and adoptNode, * this will make _dom_element_copy can be used in them. */ -dom_exception _dom_element_copy(dom_node_internal *old, +dom_exception _dom_element_copy(dom_node_internal *old, dom_node_internal **copy) { - dom_element *olde = (dom_element *) old; - dom_element *e; + dom_element *new_node; dom_exception err; - uint32_t classnr; - - e = malloc(sizeof(dom_element)); - if (e == NULL) + + new_node = malloc(sizeof(dom_element)); + if (new_node == NULL) return DOM_NO_MEM_ERR; - err = dom_node_copy_internal(old, e); + err = dom_element_copy_internal(old, new_node); if (err != DOM_NO_ERR) { - free(e); + free(new_node); return err; } - if (olde->attributes != NULL) { + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_element_copy_internal(dom_element *old, dom_element *new) +{ + dom_exception err; + uint32_t classnr; + + if (old->attributes != NULL) { /* Copy the attribute list */ - e->attributes = _dom_element_attr_list_clone(olde->attributes, - e); + new->attributes = _dom_element_attr_list_clone( + old->attributes, new); } else { - e->attributes = NULL; + new->attributes = NULL; } - - if (olde->n_classes > 0) { - e->n_classes = olde->n_classes; - e->classes = malloc(sizeof(lwc_string *) * e->n_classes); - for (classnr = 0; classnr < e->n_classes; ++classnr) - e->classes[classnr] = - lwc_string_ref(olde->classes[classnr]); - } else { - e->n_classes = 0; - e->classes = NULL; - } - - e->id_ns = NULL; - e->id_name = NULL; - /* TODO: deal with dom_type_info, it get no definition ! */ + if (old->n_classes > 0) { + new->n_classes = old->n_classes; + new->classes = malloc(sizeof(lwc_string *) * new->n_classes); + if (new->classes == NULL) { + err = DOM_NO_MEM_ERR; + goto error; + } + for (classnr = 0; classnr < new->n_classes; ++classnr) + new->classes[classnr] = + lwc_string_ref(old->classes[classnr]); + } else { + new->n_classes = 0; + new->classes = NULL; + } + + err = dom_node_copy_internal(old, new); + if (err != DOM_NO_ERR) { + goto error; + } - *copy = (dom_node_internal *) e; + new->id_ns = NULL; + new->id_name = NULL; + + /* TODO: deal with dom_type_info, it get no definition ! */ return DOM_NO_ERR; + +error: + free(new->classes); + return err; } diff --git a/src/core/element.h b/src/core/element.h index 5873396e..c89ddc01 100644 --- a/src/core/element.h +++ b/src/core/element.h @@ -231,6 +231,11 @@ dom_exception _dom_element_copy(dom_node_internal *old, _dom_element_copy /* Helper functions*/ +dom_exception _dom_element_copy_internal(dom_element *old, + dom_element *new); +#define dom_element_copy_internal(o, n) _dom_element_copy_internal( \ + (dom_element *) (o), (dom_element *) (n)) + dom_exception _dom_element_get_id(struct dom_element *ele, dom_string **id); extern struct dom_element_vtable _dom_element_vtable; diff --git a/src/html/html_anchor_element.c b/src/html/html_anchor_element.c index e23ae456..8d64c2b6 100644 --- a/src/html/html_anchor_element.c +++ b/src/html/html_anchor_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_anchor_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_anchor_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_anchor_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_anchor_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_anchor_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_anchor_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_anchor_element_copy_internal( + dom_html_anchor_element *old, + dom_html_anchor_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_anchor_element.h b/src/html/html_anchor_element.h index b79daf92..791956bf 100644 --- a/src/html/html_anchor_element.h +++ b/src/html/html_anchor_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_anchor_element_copy(dom_node_internal *old, _dom_virtual_html_anchor_element_destroy, \ _dom_html_anchor_element_copy +/* Helper functions*/ +dom_exception _dom_html_anchor_element_copy_internal( + dom_html_anchor_element *old, + dom_html_anchor_element *new); +#define dom_html_anchor_element_copy_internal(o, n) \ + _dom_html_anchor_element_copy_internal( \ + (dom_html_anchor_element *) (o), \ + (dom_html_anchor_element *) (n)) + #endif diff --git a/src/html/html_applet_element.c b/src/html/html_applet_element.c index 2a282931..93ea1b5f 100644 --- a/src/html/html_applet_element.c +++ b/src/html/html_applet_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_applet_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_applet_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_applet_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_applet_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_applet_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_applet_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_applet_element_copy_internal( + dom_html_applet_element *old, + dom_html_applet_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_applet_element.h b/src/html/html_applet_element.h index 20bef1f6..466c127f 100644 --- a/src/html/html_applet_element.h +++ b/src/html/html_applet_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_applet_element_copy(dom_node_internal *old, _dom_virtual_html_applet_element_destroy, \ _dom_html_applet_element_copy +/* Helper functions*/ +dom_exception _dom_html_applet_element_copy_internal( + dom_html_applet_element *old, + dom_html_applet_element *new); +#define dom_html_applet_element_copy_internal(o, n) \ + _dom_html_applet_element_copy_internal( \ + (dom_html_applet_element *) (o), \ + (dom_html_applet_element *) (n)) + #endif diff --git a/src/html/html_area_element.c b/src/html/html_area_element.c index 4a2cefb2..828b073a 100644 --- a/src/html/html_area_element.c +++ b/src/html/html_area_element.c @@ -165,10 +165,39 @@ void _dom_virtual_html_area_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_area_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_area_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_area_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_area_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_area_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_area_element_copy_internal( + dom_html_area_element *old, + dom_html_area_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_area_element.h b/src/html/html_area_element.h index 73462b2d..2c765f67 100644 --- a/src/html/html_area_element.h +++ b/src/html/html_area_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_area_element_copy(dom_node_internal *old, _dom_virtual_html_area_element_destroy, \ _dom_html_area_element_copy +/* Helper functions*/ +dom_exception _dom_html_area_element_copy_internal( + dom_html_area_element *old, + dom_html_area_element *new); +#define dom_html_area_element_copy_internal(o, n) \ + _dom_html_area_element_copy_internal( \ + (dom_html_area_element *) (o), \ + (dom_html_area_element *) (n)) + #endif diff --git a/src/html/html_base_element.c b/src/html/html_base_element.c index cda07073..0034f7ca 100644 --- a/src/html/html_base_element.c +++ b/src/html/html_base_element.c @@ -105,10 +105,39 @@ void _dom_virtual_html_base_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_base_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_base_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_base_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_base_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_base_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_base_element_copy_internal( + dom_html_base_element *old, + dom_html_base_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_base_element.h b/src/html/html_base_element.h index 608b99f9..1b26ee9c 100644 --- a/src/html/html_base_element.h +++ b/src/html/html_base_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_base_element_copy(dom_node_internal *old, _dom_virtual_html_base_element_destroy, \ _dom_html_base_element_copy +/* Helper functions*/ +dom_exception _dom_html_base_element_copy_internal( + dom_html_base_element *old, + dom_html_base_element *new); +#define dom_html_base_element_copy_internal(o, n) \ + _dom_html_base_element_copy_internal( \ + (dom_html_base_element *) (o), \ + (dom_html_base_element *) (n)) + #endif diff --git a/src/html/html_basefont_element.c b/src/html/html_basefont_element.c index eab5a796..ac1183de 100644 --- a/src/html/html_basefont_element.c +++ b/src/html/html_basefont_element.c @@ -133,10 +133,39 @@ void _dom_virtual_html_base_font_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_base_font_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_base_font_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_base_font_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_base_font_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_base_font_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_base_font_element_copy_internal( + dom_html_base_font_element *old, + dom_html_base_font_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_basefont_element.h b/src/html/html_basefont_element.h index 90e886ea..f4ef7046 100644 --- a/src/html/html_basefont_element.h +++ b/src/html/html_basefont_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_base_font_element_copy(dom_node_internal *old, _dom_virtual_html_base_font_element_destroy, \ _dom_html_base_font_element_copy +/* Helper functions*/ +dom_exception _dom_html_base_font_element_copy_internal( + dom_html_base_font_element *old, + dom_html_base_font_element *new); +#define dom_html_base_font_element_copy_internal(o, n) \ + _dom_html_base_font_element_copy_internal( \ + (dom_html_base_font_element *) (o), \ + (dom_html_base_font_element *) (n)) + #endif diff --git a/src/html/html_body_element.c b/src/html/html_body_element.c index 655fdb0e..0fc4b138 100644 --- a/src/html/html_body_element.c +++ b/src/html/html_body_element.c @@ -107,10 +107,39 @@ void _dom_virtual_html_body_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_body_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_body_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_body_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_body_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_body_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_body_element_copy_internal( + dom_html_body_element *old, + dom_html_body_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_body_element.h b/src/html/html_body_element.h index 765c44da..8b2e0a2b 100644 --- a/src/html/html_body_element.h +++ b/src/html/html_body_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_body_element_copy(dom_node_internal *old, _dom_virtual_html_body_element_destroy, \ _dom_html_body_element_copy +/* Helper functions*/ +dom_exception _dom_html_body_element_copy_internal( + dom_html_body_element *old, + dom_html_body_element *new); +#define dom_html_body_element_copy_internal(o, n) \ + _dom_html_body_element_copy_internal( \ + (dom_html_body_element *) (o), \ + (dom_html_body_element *) (n)) + #endif diff --git a/src/html/html_br_element.c b/src/html/html_br_element.c index 0cc9194b..74e3ea81 100644 --- a/src/html/html_br_element.c +++ b/src/html/html_br_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_br_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_br_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_br_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_br_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_br_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_br_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_br_element_copy_internal( + dom_html_br_element *old, + dom_html_br_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_br_element.h b/src/html/html_br_element.h index 75cbc496..127c994e 100644 --- a/src/html/html_br_element.h +++ b/src/html/html_br_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_br_element_copy(dom_node_internal *old, _dom_virtual_html_br_element_destroy, \ _dom_html_br_element_copy +/* Helper functions*/ +dom_exception _dom_html_br_element_copy_internal( + dom_html_br_element *old, + dom_html_br_element *new); +#define dom_html_br_element_copy_internal(o, n) \ + _dom_html_br_element_copy_internal( \ + (dom_html_br_element *) (o), \ + (dom_html_br_element *) (n)) + #endif diff --git a/src/html/html_button_element.c b/src/html/html_button_element.c index a9c34d5a..04a17dd2 100644 --- a/src/html/html_button_element.c +++ b/src/html/html_button_element.c @@ -142,10 +142,43 @@ void _dom_virtual_html_button_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_button_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_button_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_button_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_button_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_button_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_button_element_copy_internal( + dom_html_button_element *old, + dom_html_button_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + /* TODO: We don't seem to keep a ref to form element, so just + * copy the pointer for now. */ + new->form = old->form; + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_button_element.h b/src/html/html_button_element.h index 97341064..43adae40 100644 --- a/src/html/html_button_element.h +++ b/src/html/html_button_element.h @@ -55,5 +55,14 @@ dom_exception _dom_html_button_element_copy(dom_node_internal *old, dom_exception _dom_html_button_element_set_form( dom_html_button_element *button, dom_html_form_element *form); +/* Helper functions*/ +dom_exception _dom_html_button_element_copy_internal( + dom_html_button_element *old, + dom_html_button_element *new); +#define dom_html_button_element_copy_internal(o, n) \ + _dom_html_button_element_copy_internal( \ + (dom_html_button_element *) (o), \ + (dom_html_button_element *) (n)) + #endif diff --git a/src/html/html_directory_element.c b/src/html/html_directory_element.c index e50a353f..585af1c0 100644 --- a/src/html/html_directory_element.c +++ b/src/html/html_directory_element.c @@ -137,9 +137,38 @@ void _dom_virtual_html_directory_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_directory_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_directory_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_directory_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_directory_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_directory_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_directory_element_copy_internal( + dom_html_directory_element *old, + dom_html_directory_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } diff --git a/src/html/html_directory_element.h b/src/html/html_directory_element.h index 14497f67..d4c91d7c 100644 --- a/src/html/html_directory_element.h +++ b/src/html/html_directory_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_directory_element_copy(dom_node_internal *old, _dom_virtual_html_directory_element_destroy, \ _dom_html_directory_element_copy +/* Helper functions*/ +dom_exception _dom_html_directory_element_copy_internal( + dom_html_directory_element *old, + dom_html_directory_element *new); +#define dom_html_directory_element_copy_internal(o, n) \ + _dom_html_directory_element_copy_internal( \ + (dom_html_directory_element *) (o), \ + (dom_html_directory_element *) (n)) + #endif diff --git a/src/html/html_div_element.c b/src/html/html_div_element.c index 5ebb9719..b0612469 100644 --- a/src/html/html_div_element.c +++ b/src/html/html_div_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_div_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_div_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_div_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_div_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_div_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_div_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_div_element_copy_internal( + dom_html_div_element *old, + dom_html_div_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_div_element.h b/src/html/html_div_element.h index 931d2015..0ab5526d 100644 --- a/src/html/html_div_element.h +++ b/src/html/html_div_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_div_element_copy(dom_node_internal *old, _dom_virtual_html_div_element_destroy, \ _dom_html_div_element_copy +/* Helper functions*/ +dom_exception _dom_html_div_element_copy_internal( + dom_html_div_element *old, + dom_html_div_element *new); +#define dom_html_div_element_copy_internal(o, n) \ + _dom_html_div_element_copy_internal( \ + (dom_html_div_element *) (o), \ + (dom_html_div_element *) (n)) + #endif diff --git a/src/html/html_dlist_element.c b/src/html/html_dlist_element.c index e2fccc97..ab9d4c3d 100644 --- a/src/html/html_dlist_element.c +++ b/src/html/html_dlist_element.c @@ -137,9 +137,38 @@ void _dom_virtual_html_dlist_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_dlist_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_dlist_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_dlist_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_dlist_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_dlist_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_dlist_element_copy_internal( + dom_html_dlist_element *old, + dom_html_dlist_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } diff --git a/src/html/html_dlist_element.h b/src/html/html_dlist_element.h index aeca232a..ff6a6e45 100644 --- a/src/html/html_dlist_element.h +++ b/src/html/html_dlist_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_dlist_element_copy(dom_node_internal *old, _dom_virtual_html_dlist_element_destroy, \ _dom_html_dlist_element_copy +/* Helper functions*/ +dom_exception _dom_html_dlist_element_copy_internal( + dom_html_dlist_element *old, + dom_html_dlist_element *new); +#define dom_html_dlist_element_copy_internal(o, n) \ + _dom_html_dlist_element_copy_internal( \ + (dom_html_dlist_element *) (o), \ + (dom_html_dlist_element *) (n)) + #endif diff --git a/src/html/html_element.c b/src/html/html_element.c index 85380ffc..65a75ca0 100644 --- a/src/html/html_element.c +++ b/src/html/html_element.c @@ -101,7 +101,37 @@ void _dom_html_element_destroy(dom_node_internal *node) dom_exception _dom_html_element_copy(dom_node_internal *old, dom_node_internal **copy) { - return _dom_element_copy(old, copy); + dom_html_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_element_copy_internal( + dom_html_element *old, dom_html_element *new) +{ + dom_exception err; + + err = dom_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + new->type = old->type; + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_element.h b/src/html/html_element.h index 92c96ab2..0290569c 100644 --- a/src/html/html_element.h +++ b/src/html/html_element.h @@ -156,6 +156,12 @@ dom_exception dom_html_element_get_dom_ulong_property(dom_html_element *ele, dom_exception dom_html_element_set_dom_ulong_property(dom_html_element *ele, const char *name, uint32_t len, dom_ulong value); +/* Helper functions*/ +dom_exception _dom_html_element_copy_internal(dom_html_element *old, + dom_html_element *new); +#define dom_html_element_copy_internal(o, n) _dom_html_element_copy_internal( \ + (dom_html_element *) (o), (dom_html_element *) (n)) + extern struct dom_html_element_vtable _dom_html_element_vtable; #endif diff --git a/src/html/html_fieldset_element.c b/src/html/html_fieldset_element.c index c6224bff..c8698225 100644 --- a/src/html/html_fieldset_element.c +++ b/src/html/html_fieldset_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_field_set_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_field_set_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_field_set_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_field_set_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_field_set_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_field_set_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_field_set_element_copy_internal( + dom_html_field_set_element *old, + dom_html_field_set_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /** diff --git a/src/html/html_fieldset_element.h b/src/html/html_fieldset_element.h index 0560cf27..13fc522d 100644 --- a/src/html/html_fieldset_element.h +++ b/src/html/html_fieldset_element.h @@ -49,5 +49,14 @@ dom_exception _dom_html_field_set_element_copy(dom_node_internal *old, _dom_virtual_html_field_set_element_destroy, \ _dom_html_field_set_element_copy +/* Helper functions*/ +dom_exception _dom_html_field_set_element_copy_internal( + dom_html_field_set_element *old, + dom_html_field_set_element *new); +#define dom_html_field_set_element_copy_internal(o, n) \ + _dom_html_field_set_element_copy_internal( \ + (dom_html_field_set_element *) (o), \ + (dom_html_field_set_element *) (n)) + #endif diff --git a/src/html/html_font_element.c b/src/html/html_font_element.c index b77d7b67..ecedfb0b 100644 --- a/src/html/html_font_element.c +++ b/src/html/html_font_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_font_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_font_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_font_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_font_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_font_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_font_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_font_element_copy_internal( + dom_html_font_element *old, + dom_html_font_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_font_element.h b/src/html/html_font_element.h index 41f22ce4..60b220cd 100644 --- a/src/html/html_font_element.h +++ b/src/html/html_font_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_font_element_copy(dom_node_internal *old, _dom_virtual_html_font_element_destroy, \ _dom_html_font_element_copy +/* Helper functions*/ +dom_exception _dom_html_font_element_copy_internal( + dom_html_font_element *old, + dom_html_font_element *new); +#define dom_html_font_element_copy_internal(o, n) \ + _dom_html_font_element_copy_internal( \ + (dom_html_font_element *) (o), \ + (dom_html_font_element *) (n)) + #endif diff --git a/src/html/html_form_element.c b/src/html/html_form_element.c index 42eb96fc..1dd19926 100644 --- a/src/html/html_form_element.c +++ b/src/html/html_form_element.c @@ -121,10 +121,39 @@ void _dom_virtual_html_form_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_form_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_form_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_form_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_form_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_form_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_form_element_copy_internal( + dom_html_form_element *old, + dom_html_form_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_form_element.h b/src/html/html_form_element.h index bab3ef8e..4987820a 100644 --- a/src/html/html_form_element.h +++ b/src/html/html_form_element.h @@ -50,5 +50,14 @@ dom_exception _dom_html_form_element_copy(dom_node_internal *old, _dom_virtual_html_form_element_destroy, \ _dom_html_form_element_copy +/* Helper functions*/ +dom_exception _dom_html_form_element_copy_internal( + dom_html_form_element *old, + dom_html_form_element *new); +#define dom_html_form_element_copy_internal(o, n) \ + _dom_html_form_element_copy_internal( \ + (dom_html_form_element *) (o), \ + (dom_html_form_element *) (n)) + #endif diff --git a/src/html/html_frame_element.c b/src/html/html_frame_element.c index 4835667f..fe6859c9 100644 --- a/src/html/html_frame_element.c +++ b/src/html/html_frame_element.c @@ -137,10 +137,39 @@ void _dom_virtual_html_frame_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_frame_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_frame_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_frame_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_frame_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_frame_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_frame_element_copy_internal( + dom_html_frame_element *old, + dom_html_frame_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_frame_element.h b/src/html/html_frame_element.h index 0bef1dc7..8ad3d7b8 100644 --- a/src/html/html_frame_element.h +++ b/src/html/html_frame_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_frame_element_copy(dom_node_internal *old, _dom_virtual_html_frame_element_destroy, \ _dom_html_frame_element_copy +/* Helper functions*/ +dom_exception _dom_html_frame_element_copy_internal( + dom_html_frame_element *old, + dom_html_frame_element *new); +#define dom_html_frame_element_copy_internal(o, n) \ + _dom_html_frame_element_copy_internal( \ + (dom_html_frame_element *) (o), \ + (dom_html_frame_element *) (n)) + #endif diff --git a/src/html/html_frameset_element.c b/src/html/html_frameset_element.c index 4af3c19f..be44d5dd 100644 --- a/src/html/html_frameset_element.c +++ b/src/html/html_frameset_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_frame_set_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_frame_set_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_frame_set_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_frame_set_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_frame_set_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_frame_set_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_frame_set_element_copy_internal( + dom_html_frame_set_element *old, + dom_html_frame_set_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_frameset_element.h b/src/html/html_frameset_element.h index 7d97018f..4427a58b 100644 --- a/src/html/html_frameset_element.h +++ b/src/html/html_frameset_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_frame_set_element_copy(dom_node_internal *old, _dom_virtual_html_frame_set_element_destroy, \ _dom_html_frame_set_element_copy +/* Helper functions*/ +dom_exception _dom_html_frame_set_element_copy_internal( + dom_html_frame_set_element *old, + dom_html_frame_set_element *new); +#define dom_html_frame_set_element_copy_internal(o, n) \ + _dom_html_frame_set_element_copy_internal( \ + (dom_html_frame_set_element *) (o), \ + (dom_html_frame_set_element *) (n)) + #endif diff --git a/src/html/html_head_element.c b/src/html/html_head_element.c index 85665f36..ff02b1f1 100644 --- a/src/html/html_head_element.c +++ b/src/html/html_head_element.c @@ -105,10 +105,39 @@ void _dom_virtual_html_head_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_head_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_head_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_head_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_head_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_head_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_head_element_copy_internal( + dom_html_head_element *old, + dom_html_head_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_head_element.h b/src/html/html_head_element.h index 08659fd4..63953a32 100644 --- a/src/html/html_head_element.h +++ b/src/html/html_head_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_head_element_copy(dom_node_internal *old, _dom_virtual_html_head_element_destroy, \ _dom_html_head_element_copy +/* Helper functions*/ +dom_exception _dom_html_head_element_copy_internal( + dom_html_head_element *old, + dom_html_head_element *new); +#define dom_html_head_element_copy_internal(o, n) \ + _dom_html_head_element_copy_internal( \ + (dom_html_head_element *) (o), \ + (dom_html_head_element *) (n)) + #endif diff --git a/src/html/html_heading_element.c b/src/html/html_heading_element.c index b81c55da..8ab2c5ad 100644 --- a/src/html/html_heading_element.c +++ b/src/html/html_heading_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_heading_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_heading_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_heading_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_heading_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_heading_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_heading_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_heading_element_copy_internal( + dom_html_heading_element *old, + dom_html_heading_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_heading_element.h b/src/html/html_heading_element.h index 543f9a94..4765d658 100644 --- a/src/html/html_heading_element.h +++ b/src/html/html_heading_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_heading_element_copy(dom_node_internal *old, _dom_virtual_html_heading_element_destroy, \ _dom_html_heading_element_copy +/* Helper functions*/ +dom_exception _dom_html_heading_element_copy_internal( + dom_html_heading_element *old, + dom_html_heading_element *new); +#define dom_html_heading_element_copy_internal(o, n) \ + _dom_html_heading_element_copy_internal( \ + (dom_html_heading_element *) (o), \ + (dom_html_heading_element *) (n)) + #endif diff --git a/src/html/html_hr_element.c b/src/html/html_hr_element.c index 6d96c849..e6086f57 100644 --- a/src/html/html_hr_element.c +++ b/src/html/html_hr_element.c @@ -137,10 +137,39 @@ void _dom_virtual_html_hr_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_hr_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_hr_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_hr_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_hr_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_hr_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_hr_element_copy_internal( + dom_html_hr_element *old, + dom_html_hr_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_hr_element.h b/src/html/html_hr_element.h index 63b5bbcc..e0eb40b7 100644 --- a/src/html/html_hr_element.h +++ b/src/html/html_hr_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_hr_element_copy(dom_node_internal *old, _dom_virtual_html_hr_element_destroy, \ _dom_html_hr_element_copy +/* Helper functions*/ +dom_exception _dom_html_hr_element_copy_internal( + dom_html_hr_element *old, + dom_html_hr_element *new); +#define dom_html_hr_element_copy_internal(o, n) \ + _dom_html_hr_element_copy_internal( \ + (dom_html_hr_element *) (o), \ + (dom_html_hr_element *) (n)) + #endif diff --git a/src/html/html_html_element.c b/src/html/html_html_element.c index dccc8a5f..9cdcd5e0 100644 --- a/src/html/html_html_element.c +++ b/src/html/html_html_element.c @@ -106,10 +106,39 @@ void _dom_virtual_html_html_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_html_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_html_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_html_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_html_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_html_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_html_element_copy_internal( + dom_html_html_element *old, + dom_html_html_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_html_element.h b/src/html/html_html_element.h index 78da8f14..d3a872f0 100644 --- a/src/html/html_html_element.h +++ b/src/html/html_html_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_html_element_copy(dom_node_internal *old, _dom_virtual_html_html_element_destroy, \ _dom_html_html_element_copy +/* Helper functions*/ +dom_exception _dom_html_html_element_copy_internal( + dom_html_html_element *old, + dom_html_html_element *new); +#define dom_html_html_element_copy_internal(o, n) \ + _dom_html_html_element_copy_internal( \ + (dom_html_html_element *) (o), \ + (dom_html_html_element *) (n)) + #endif diff --git a/src/html/html_iframe_element.c b/src/html/html_iframe_element.c index 5ff5d262..4d7272b1 100644 --- a/src/html/html_iframe_element.c +++ b/src/html/html_iframe_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_iframe_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_iframe_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_iframe_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_iframe_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_iframe_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_iframe_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_iframe_element_copy_internal( + dom_html_iframe_element *old, + dom_html_iframe_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_iframe_element.h b/src/html/html_iframe_element.h index 07ed091f..df152342 100644 --- a/src/html/html_iframe_element.h +++ b/src/html/html_iframe_element.h @@ -49,5 +49,14 @@ dom_exception _dom_html_iframe_element_copy(dom_node_internal *old, _dom_virtual_html_iframe_element_destroy, \ _dom_html_iframe_element_copy +/* Helper functions*/ +dom_exception _dom_html_iframe_element_copy_internal( + dom_html_iframe_element *old, + dom_html_iframe_element *new); +#define dom_html_iframe_element_copy_internal(o, n) \ + _dom_html_iframe_element_copy_internal( \ + (dom_html_iframe_element *) (o), \ + (dom_html_iframe_element *) (n)) + #endif diff --git a/src/html/html_image_element.c b/src/html/html_image_element.c index db8b8b52..3cdd15f5 100644 --- a/src/html/html_image_element.c +++ b/src/html/html_image_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_image_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_image_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_image_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_image_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_image_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_image_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_image_element_copy_internal( + dom_html_image_element *old, + dom_html_image_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_image_element.h b/src/html/html_image_element.h index d17c513a..3c9913ab 100644 --- a/src/html/html_image_element.h +++ b/src/html/html_image_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_image_element_copy(dom_node_internal *old, _dom_virtual_html_image_element_destroy, \ _dom_html_image_element_copy +/* Helper functions*/ +dom_exception _dom_html_image_element_copy_internal( + dom_html_image_element *old, + dom_html_image_element *new); +#define dom_html_image_element_copy_internal(o, n) \ + _dom_html_image_element_copy_internal( \ + (dom_html_image_element *) (o), \ + (dom_html_image_element *) (n)) + #endif diff --git a/src/html/html_input_element.c b/src/html/html_input_element.c index 2dc0dc39..079b55eb 100644 --- a/src/html/html_input_element.c +++ b/src/html/html_input_element.c @@ -303,10 +303,51 @@ void _dom_virtual_html_input_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_input_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_input_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_input_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_input_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_input_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_input_element_copy_internal( + dom_html_input_element *old, + dom_html_input_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + /* TODO: We don't seem to keep a ref to form element, so just + * copy the pointer for now. */ + new->form = old->form; + + new->default_checked = old->default_checked; + new->default_checked_set = old->default_checked_set; + new->default_value = old->default_value == NULL ? + NULL : dom_string_ref(old->default_value); + new->default_value_set = old->default_value_set; + new->checked = old->checked; + new->checked_set = old->checked_set; + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_input_element.h b/src/html/html_input_element.h index b4458882..36005614 100644 --- a/src/html/html_input_element.h +++ b/src/html/html_input_element.h @@ -61,5 +61,14 @@ dom_exception _dom_html_input_element_copy(dom_node_internal *old, dom_exception _dom_html_input_element_set_form( dom_html_input_element *input, dom_html_form_element *form); +/* Helper functions*/ +dom_exception _dom_html_input_element_copy_internal( + dom_html_input_element *old, + dom_html_input_element *new); +#define dom_html_input_element_copy_internal(o, n) \ + _dom_html_input_element_copy_internal( \ + (dom_html_input_element *) (o), \ + (dom_html_input_element *) (n)) + #endif diff --git a/src/html/html_isindex_element.c b/src/html/html_isindex_element.c index 82c72963..40cb99ca 100644 --- a/src/html/html_isindex_element.c +++ b/src/html/html_isindex_element.c @@ -107,10 +107,39 @@ void _dom_virtual_html_isindex_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_isindex_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_isindex_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_isindex_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_isindex_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_isindex_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_isindex_element_copy_internal( + dom_html_isindex_element *old, + dom_html_isindex_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_isindex_element.h b/src/html/html_isindex_element.h index 697e2eb6..0cb7f4e2 100644 --- a/src/html/html_isindex_element.h +++ b/src/html/html_isindex_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_isindex_element_copy(dom_node_internal *old, _dom_virtual_html_isindex_element_destroy, \ _dom_html_isindex_element_copy +/* Helper functions*/ +dom_exception _dom_html_isindex_element_copy_internal( + dom_html_isindex_element *old, + dom_html_isindex_element *new); +#define dom_html_isindex_element_copy_internal(o, n) \ + _dom_html_isindex_element_copy_internal( \ + (dom_html_isindex_element *) (o), \ + (dom_html_isindex_element *) (n)) + #endif diff --git a/src/html/html_label_element.c b/src/html/html_label_element.c index e5730a2e..3864cc40 100644 --- a/src/html/html_label_element.c +++ b/src/html/html_label_element.c @@ -107,10 +107,39 @@ void _dom_virtual_html_label_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_label_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_label_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_label_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_label_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_label_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_label_element_copy_internal( + dom_html_label_element *old, + dom_html_label_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /** diff --git a/src/html/html_label_element.h b/src/html/html_label_element.h index 4eb042c0..f4aca989 100644 --- a/src/html/html_label_element.h +++ b/src/html/html_label_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_label_element_copy(dom_node_internal *old, _dom_virtual_html_label_element_destroy, \ _dom_html_label_element_copy +/* Helper functions*/ +dom_exception _dom_html_label_element_copy_internal( + dom_html_label_element *old, + dom_html_label_element *new); +#define dom_html_label_element_copy_internal(o, n) \ + _dom_html_label_element_copy_internal( \ + (dom_html_label_element *) (o), \ + (dom_html_label_element *) (n)) + #endif diff --git a/src/html/html_legend_element.c b/src/html/html_legend_element.c index 842916f7..efb712b8 100644 --- a/src/html/html_legend_element.c +++ b/src/html/html_legend_element.c @@ -144,10 +144,39 @@ void _dom_virtual_html_legend_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_legend_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_legend_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_legend_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_legend_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_legend_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_legend_element_copy_internal( + dom_html_legend_element *old, + dom_html_legend_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_legend_element.h b/src/html/html_legend_element.h index 50b9b51e..226042ad 100644 --- a/src/html/html_legend_element.h +++ b/src/html/html_legend_element.h @@ -49,5 +49,14 @@ dom_exception _dom_html_legend_element_copy(dom_node_internal *old, _dom_virtual_html_legend_element_destroy, \ _dom_html_legend_element_copy +/* Helper functions*/ +dom_exception _dom_html_legend_element_copy_internal( + dom_html_legend_element *old, + dom_html_legend_element *new); +#define dom_html_legend_element_copy_internal(o, n) \ + _dom_html_legend_element_copy_internal( \ + (dom_html_legend_element *) (o), \ + (dom_html_legend_element *) (n)) + #endif diff --git a/src/html/html_li_element.c b/src/html/html_li_element.c index 3af8fea2..84becf91 100644 --- a/src/html/html_li_element.c +++ b/src/html/html_li_element.c @@ -133,10 +133,39 @@ void _dom_virtual_html_li_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_li_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_li_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_li_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_li_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_li_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_li_element_copy_internal( + dom_html_li_element *old, + dom_html_li_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_li_element.h b/src/html/html_li_element.h index 74dd5aff..894802d7 100644 --- a/src/html/html_li_element.h +++ b/src/html/html_li_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_li_element_copy(dom_node_internal *old, _dom_virtual_html_li_element_destroy, \ _dom_html_li_element_copy +/* Helper functions*/ +dom_exception _dom_html_li_element_copy_internal( + dom_html_li_element *old, + dom_html_li_element *new); +#define dom_html_li_element_copy_internal(o, n) \ + _dom_html_li_element_copy_internal( \ + (dom_html_li_element *) (o), \ + (dom_html_li_element *) (n)) + #endif diff --git a/src/html/html_link_element.c b/src/html/html_link_element.c index 10a2e7af..87fe9802 100644 --- a/src/html/html_link_element.c +++ b/src/html/html_link_element.c @@ -138,10 +138,39 @@ void _dom_virtual_html_link_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_link_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_link_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_link_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_link_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_link_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_link_element_copy_internal( + dom_html_link_element *old, + dom_html_link_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_link_element.h b/src/html/html_link_element.h index d75b0ff0..6371a336 100644 --- a/src/html/html_link_element.h +++ b/src/html/html_link_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_link_element_copy(dom_node_internal *old, _dom_virtual_html_link_element_destroy, \ _dom_html_link_element_copy +/* Helper functions*/ +dom_exception _dom_html_link_element_copy_internal( + dom_html_link_element *old, + dom_html_link_element *new); +#define dom_html_link_element_copy_internal(o, n) \ + _dom_html_link_element_copy_internal( \ + (dom_html_link_element *) (o), \ + (dom_html_link_element *) (n)) + #endif diff --git a/src/html/html_map_element.c b/src/html/html_map_element.c index 980f002f..3b10222f 100644 --- a/src/html/html_map_element.c +++ b/src/html/html_map_element.c @@ -112,10 +112,39 @@ void _dom_virtual_html_map_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_map_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_map_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_map_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_map_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_map_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_map_element_copy_internal( + dom_html_map_element *old, + dom_html_map_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ @@ -161,7 +190,7 @@ dom_exception dom_html_map_element_set_##attr( \ SIMPLE_GET_SET(name); /* The callback function for _dom_html_collection_create*/ -bool callback(struct dom_node_internal *node, void *ctx) +static bool callback(struct dom_node_internal *node, void *ctx) { if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, diff --git a/src/html/html_map_element.h b/src/html/html_map_element.h index ede8a719..7e0e3dc1 100644 --- a/src/html/html_map_element.h +++ b/src/html/html_map_element.h @@ -49,6 +49,13 @@ dom_exception _dom_html_map_element_copy(dom_node_internal *old, _dom_virtual_html_map_element_destroy, \ _dom_html_map_element_copy -#endif +/* Helper functions*/ +dom_exception _dom_html_map_element_copy_internal( + dom_html_map_element *old, + dom_html_map_element *new); +#define dom_html_map_element_copy_internal(o, n) \ + _dom_html_map_element_copy_internal( \ + (dom_html_map_element *) (o), \ + (dom_html_map_element *) (n)) -bool callback(struct dom_node_internal *node, void *ctx); +#endif diff --git a/src/html/html_menu_element.c b/src/html/html_menu_element.c index 1226c70c..09eadb68 100644 --- a/src/html/html_menu_element.c +++ b/src/html/html_menu_element.c @@ -137,9 +137,38 @@ void _dom_virtual_html_menu_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_menu_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_menu_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_menu_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_menu_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_menu_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_menu_element_copy_internal( + dom_html_menu_element *old, + dom_html_menu_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } diff --git a/src/html/html_menu_element.h b/src/html/html_menu_element.h index f2063159..04f285fc 100644 --- a/src/html/html_menu_element.h +++ b/src/html/html_menu_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_menu_element_copy(dom_node_internal *old, _dom_virtual_html_menu_element_destroy, \ _dom_html_menu_element_copy +/* Helper functions*/ +dom_exception _dom_html_menu_element_copy_internal( + dom_html_menu_element *old, + dom_html_menu_element *new); +#define dom_html_menu_element_copy_internal(o, n) \ + _dom_html_menu_element_copy_internal( \ + (dom_html_menu_element *) (o), \ + (dom_html_menu_element *) (n)) + #endif diff --git a/src/html/html_meta_element.c b/src/html/html_meta_element.c index 56eaa344..4098daf1 100644 --- a/src/html/html_meta_element.c +++ b/src/html/html_meta_element.c @@ -105,10 +105,39 @@ void _dom_virtual_html_meta_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_meta_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_meta_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_meta_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_meta_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_meta_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_meta_element_copy_internal( + dom_html_meta_element *old, + dom_html_meta_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_meta_element.h b/src/html/html_meta_element.h index d92e5fda..65b625c5 100644 --- a/src/html/html_meta_element.h +++ b/src/html/html_meta_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_meta_element_copy(dom_node_internal *old, _dom_virtual_html_meta_element_destroy, \ _dom_html_meta_element_copy +/* Helper functions*/ +dom_exception _dom_html_meta_element_copy_internal( + dom_html_meta_element *old, + dom_html_meta_element *new); +#define dom_html_meta_element_copy_internal(o, n) \ + _dom_html_meta_element_copy_internal( \ + (dom_html_meta_element *) (o), \ + (dom_html_meta_element *) (n)) + #endif diff --git a/src/html/html_mod_element.c b/src/html/html_mod_element.c index d952a1be..20cb0428 100644 --- a/src/html/html_mod_element.c +++ b/src/html/html_mod_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_mod_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_mod_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_mod_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_mod_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_mod_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_mod_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_mod_element_copy_internal( + dom_html_mod_element *old, + dom_html_mod_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_mod_element.h b/src/html/html_mod_element.h index 0e4c49e5..c9fbc4cf 100644 --- a/src/html/html_mod_element.h +++ b/src/html/html_mod_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_mod_element_copy(dom_node_internal *old, _dom_virtual_html_mod_element_destroy, \ _dom_html_mod_element_copy +/* Helper functions*/ +dom_exception _dom_html_mod_element_copy_internal( + dom_html_mod_element *old, + dom_html_mod_element *new); +#define dom_html_mod_element_copy_internal(o, n) \ + _dom_html_mod_element_copy_internal( \ + (dom_html_mod_element *) (o), \ + (dom_html_mod_element *) (n)) + #endif diff --git a/src/html/html_object_element.c b/src/html/html_object_element.c index 914510db..e926aefd 100644 --- a/src/html/html_object_element.c +++ b/src/html/html_object_element.c @@ -112,10 +112,39 @@ void _dom_virtual_html_object_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_object_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_object_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_object_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_object_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_object_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_object_element_copy_internal( + dom_html_object_element *old, + dom_html_object_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_object_element.h b/src/html/html_object_element.h index b569c9d7..55eddb56 100644 --- a/src/html/html_object_element.h +++ b/src/html/html_object_element.h @@ -50,5 +50,14 @@ dom_exception _dom_html_object_element_copy(dom_node_internal *old, _dom_virtual_html_object_element_destroy, \ _dom_html_object_element_copy +/* Helper functions*/ +dom_exception _dom_html_object_element_copy_internal( + dom_html_object_element *old, + dom_html_object_element *new); +#define dom_html_object_element_copy_internal(o, n) \ + _dom_html_object_element_copy_internal( \ + (dom_html_object_element *) (o), \ + (dom_html_object_element *) (n)) + #endif diff --git a/src/html/html_olist_element.c b/src/html/html_olist_element.c index 411cc980..c89d11fe 100644 --- a/src/html/html_olist_element.c +++ b/src/html/html_olist_element.c @@ -157,10 +157,39 @@ void _dom_virtual_html_olist_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_olist_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_olist_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_olist_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_olist_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_olist_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_olist_element_copy_internal( + dom_html_olist_element *old, + dom_html_olist_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_olist_element.h b/src/html/html_olist_element.h index b06b277f..bf8e79ec 100644 --- a/src/html/html_olist_element.h +++ b/src/html/html_olist_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_olist_element_copy(dom_node_internal *old, _dom_virtual_html_olist_element_destroy, \ _dom_html_olist_element_copy +/* Helper functions*/ +dom_exception _dom_html_olist_element_copy_internal( + dom_html_olist_element *old, + dom_html_olist_element *new); +#define dom_html_olist_element_copy_internal(o, n) \ + _dom_html_olist_element_copy_internal( \ + (dom_html_olist_element *) (o), \ + (dom_html_olist_element *) (n)) + #endif diff --git a/src/html/html_opt_group_element.c b/src/html/html_opt_group_element.c index 01811110..6af0a29b 100644 --- a/src/html/html_opt_group_element.c +++ b/src/html/html_opt_group_element.c @@ -140,10 +140,39 @@ void _dom_virtual_html_opt_group_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_opt_group_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_opt_group_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_opt_group_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_opt_group_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_opt_group_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_opt_group_element_copy_internal( + dom_html_opt_group_element *old, + dom_html_opt_group_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_opt_group_element.h b/src/html/html_opt_group_element.h index 94dcf9eb..a34bb756 100644 --- a/src/html/html_opt_group_element.h +++ b/src/html/html_opt_group_element.h @@ -48,4 +48,13 @@ dom_exception _dom_html_opt_group_element_copy(dom_node_internal *old, _dom_virtual_html_opt_group_element_destroy, \ _dom_html_opt_group_element_copy +/* Helper functions*/ +dom_exception _dom_html_opt_group_element_copy_internal( + dom_html_opt_group_element *old, + dom_html_opt_group_element *new); +#define dom_html_opt_group_element_copy_internal(o, n) \ + _dom_html_opt_group_element_copy_internal( \ + (dom_html_opt_group_element *) (o), \ + (dom_html_opt_group_element *) (n)) + #endif diff --git a/src/html/html_option_element.c b/src/html/html_option_element.c index a4dec3cc..a593ebe9 100644 --- a/src/html/html_option_element.c +++ b/src/html/html_option_element.c @@ -445,9 +445,41 @@ void _dom_virtual_html_option_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_option_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_option_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_option_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_option_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_option_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_option_element_copy_internal( + dom_html_option_element *old, + dom_html_option_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + new->default_selected = old->default_selected; + new->default_selected_set = old->default_selected_set; + + return DOM_NO_ERR; } diff --git a/src/html/html_option_element.h b/src/html/html_option_element.h index b1f8b640..4b7d0b11 100644 --- a/src/html/html_option_element.h +++ b/src/html/html_option_element.h @@ -50,5 +50,14 @@ dom_exception _dom_html_option_element_copy(dom_node_internal *old, _dom_virtual_html_option_element_destroy, \ _dom_html_option_element_copy +/* Helper functions*/ +dom_exception _dom_html_option_element_copy_internal( + dom_html_option_element *old, + dom_html_option_element *new); +#define dom_html_option_element_copy_internal(o, n) \ + _dom_html_option_element_copy_internal( \ + (dom_html_option_element *) (o), \ + (dom_html_option_element *) (n)) + #endif diff --git a/src/html/html_paragraph_element.c b/src/html/html_paragraph_element.c index bb8c1b38..2b2f4205 100644 --- a/src/html/html_paragraph_element.c +++ b/src/html/html_paragraph_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_paragraph_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_paragraph_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_paragraph_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_paragraph_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_paragraph_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_paragraph_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_paragraph_element_copy_internal( + dom_html_paragraph_element *old, + dom_html_paragraph_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_paragraph_element.h b/src/html/html_paragraph_element.h index 7495a762..d52fefa1 100644 --- a/src/html/html_paragraph_element.h +++ b/src/html/html_paragraph_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_paragraph_element_copy(dom_node_internal *old, _dom_virtual_html_paragraph_element_destroy, \ _dom_html_paragraph_element_copy +/* Helper functions*/ +dom_exception _dom_html_paragraph_element_copy_internal( + dom_html_paragraph_element *old, + dom_html_paragraph_element *new); +#define dom_html_paragraph_element_copy_internal(o, n) \ + _dom_html_paragraph_element_copy_internal( \ + (dom_html_paragraph_element *) (o), \ + (dom_html_paragraph_element *) (n)) + #endif diff --git a/src/html/html_param_element.c b/src/html/html_param_element.c index 4c7ee892..c75e1ce0 100644 --- a/src/html/html_param_element.c +++ b/src/html/html_param_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_param_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_param_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_param_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_param_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_param_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_param_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_param_element_copy_internal( + dom_html_param_element *old, + dom_html_param_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_param_element.h b/src/html/html_param_element.h index f56a6a57..821590ea 100644 --- a/src/html/html_param_element.h +++ b/src/html/html_param_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_param_element_copy(dom_node_internal *old, _dom_virtual_html_param_element_destroy, \ _dom_html_param_element_copy +/* Helper functions*/ +dom_exception _dom_html_param_element_copy_internal( + dom_html_param_element *old, + dom_html_param_element *new); +#define dom_html_param_element_copy_internal(o, n) \ + _dom_html_param_element_copy_internal( \ + (dom_html_param_element *) (o), \ + (dom_html_param_element *) (n)) + #endif diff --git a/src/html/html_pre_element.c b/src/html/html_pre_element.c index 502e4d87..64c8c3df 100644 --- a/src/html/html_pre_element.c +++ b/src/html/html_pre_element.c @@ -133,9 +133,38 @@ void _dom_virtual_html_pre_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_pre_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_pre_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_pre_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_pre_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_pre_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_pre_element_copy_internal( + dom_html_pre_element *old, + dom_html_pre_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } diff --git a/src/html/html_pre_element.h b/src/html/html_pre_element.h index d9dc6d81..0a5e422f 100644 --- a/src/html/html_pre_element.h +++ b/src/html/html_pre_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_pre_element_copy(dom_node_internal *old, _dom_virtual_html_pre_element_destroy, \ _dom_html_pre_element_copy +/* Helper functions*/ +dom_exception _dom_html_pre_element_copy_internal( + dom_html_pre_element *old, + dom_html_pre_element *new); +#define dom_html_pre_element_copy_internal(o, n) \ + _dom_html_pre_element_copy_internal( \ + (dom_html_pre_element *) (o), \ + (dom_html_pre_element *) (n)) + #endif diff --git a/src/html/html_quote_element.c b/src/html/html_quote_element.c index f2263c39..cf3e0c5d 100644 --- a/src/html/html_quote_element.c +++ b/src/html/html_quote_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_quote_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_quote_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_quote_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_quote_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_quote_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_quote_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_quote_element_copy_internal( + dom_html_quote_element *old, + dom_html_quote_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_quote_element.h b/src/html/html_quote_element.h index f62f2ec7..baecef38 100644 --- a/src/html/html_quote_element.h +++ b/src/html/html_quote_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_quote_element_copy(dom_node_internal *old, _dom_virtual_html_quote_element_destroy, \ _dom_html_quote_element_copy +/* Helper functions*/ +dom_exception _dom_html_quote_element_copy_internal( + dom_html_quote_element *old, + dom_html_quote_element *new); +#define dom_html_quote_element_copy_internal(o, n) \ + _dom_html_quote_element_copy_internal( \ + (dom_html_quote_element *) (o), \ + (dom_html_quote_element *) (n)) + #endif diff --git a/src/html/html_script_element.c b/src/html/html_script_element.c index 534c3908..d20d7274 100644 --- a/src/html/html_script_element.c +++ b/src/html/html_script_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_script_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_script_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_script_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_script_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_script_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_script_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_script_element_copy_internal( + dom_html_script_element *old, + dom_html_script_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_script_element.h b/src/html/html_script_element.h index c15e4457..9b1d704c 100644 --- a/src/html/html_script_element.h +++ b/src/html/html_script_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_script_element_copy(dom_node_internal *old, _dom_virtual_html_script_element_destroy, \ _dom_html_script_element_copy +/* Helper functions*/ +dom_exception _dom_html_script_element_copy_internal( + dom_html_script_element *old, + dom_html_script_element *new); +#define dom_html_script_element_copy_internal(o, n) \ + _dom_html_script_element_copy_internal( \ + (dom_html_script_element *) (o), \ + (dom_html_script_element *) (n)) + #endif diff --git a/src/html/html_select_element.c b/src/html/html_select_element.c index fe06e5d2..ff549b2f 100644 --- a/src/html/html_select_element.c +++ b/src/html/html_select_element.c @@ -113,10 +113,45 @@ void _dom_virtual_html_select_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_select_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_select_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_select_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_select_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_select_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_select_element_copy_internal( + dom_html_select_element *old, + dom_html_select_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + /* TODO: We don't seem to keep a ref to form element, so just + * copy the pointer for now. */ + new->form = old->form; + + new->selected = old->selected; + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_select_element.h b/src/html/html_select_element.h index d7dc0a4b..abde182b 100644 --- a/src/html/html_select_element.h +++ b/src/html/html_select_element.h @@ -58,5 +58,14 @@ dom_exception _dom_html_select_element_copy(dom_node_internal *old, dom_exception _dom_html_select_element_set_form( dom_html_select_element *select, dom_html_form_element *form); +/* Helper functions*/ +dom_exception _dom_html_select_element_copy_internal( + dom_html_select_element *old, + dom_html_select_element *new); +#define dom_html_select_element_copy_internal(o, n) \ + _dom_html_select_element_copy_internal( \ + (dom_html_select_element *) (o), \ + (dom_html_select_element *) (n)) + #endif diff --git a/src/html/html_style_element.c b/src/html/html_style_element.c index 7434096b..ae845be4 100644 --- a/src/html/html_style_element.c +++ b/src/html/html_style_element.c @@ -105,10 +105,39 @@ void _dom_virtual_html_style_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_style_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_style_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_style_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_style_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_style_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_style_element_copy_internal( + dom_html_style_element *old, + dom_html_style_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } diff --git a/src/html/html_style_element.h b/src/html/html_style_element.h index e21b9cf4..61b6aa77 100644 --- a/src/html/html_style_element.h +++ b/src/html/html_style_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_style_element_copy(dom_node_internal *old, _dom_virtual_html_style_element_destroy, \ _dom_html_style_element_copy +/* Helper functions*/ +dom_exception _dom_html_style_element_copy_internal( + dom_html_style_element *old, + dom_html_style_element *new); +#define dom_html_style_element_copy_internal(o, n) \ + _dom_html_style_element_copy_internal( \ + (dom_html_style_element *) (o), \ + (dom_html_style_element *) (n)) + #endif diff --git a/src/html/html_table_element.c b/src/html/html_table_element.c index 442e1d6e..7e8a5087 100644 --- a/src/html/html_table_element.c +++ b/src/html/html_table_element.c @@ -113,10 +113,39 @@ void _dom_virtual_html_table_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_table_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_table_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_table_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_table_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_table_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_table_element_copy_internal( + dom_html_table_element *old, + dom_html_table_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ @@ -351,7 +380,7 @@ dom_exception dom_html_table_element_set_t_foot( * \param ctx The dom_html_document object (void *) * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ -bool table_rows_callback(struct dom_node_internal *node, void *ctx) +static bool table_rows_callback(struct dom_node_internal *node, void *ctx) { dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && @@ -385,7 +414,7 @@ dom_exception dom_html_table_element_get_rows( * \param ctx The dom_html_document object (void *) * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ -bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx) +static bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx) { dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && @@ -403,6 +432,7 @@ bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx) * \param t_bodies The Status * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ + dom_exception dom_html_table_element_get_t_bodies( dom_html_table_element *element, dom_html_collection **t_bodies) @@ -645,7 +675,7 @@ dom_exception dom_html_table_element_delete_t_head( * \param t_head The Status * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ -dom_exception dom_html_table_element_create_t_body( +static dom_exception dom_html_table_element_create_t_body( dom_html_table_element *element, dom_html_table_section_element **t_body) { diff --git a/src/html/html_table_element.h b/src/html/html_table_element.h index 4e4747c2..eed6a4ad 100644 --- a/src/html/html_table_element.h +++ b/src/html/html_table_element.h @@ -48,10 +48,13 @@ dom_exception _dom_html_table_element_copy(dom_node_internal *old, _dom_virtual_html_table_element_destroy, \ _dom_html_table_element_copy -#endif +/* Helper functions*/ +dom_exception _dom_html_table_element_copy_internal( + dom_html_table_element *old, + dom_html_table_element *new); +#define dom_html_table_element_copy_internal(o, n) \ + _dom_html_table_element_copy_internal( \ + (dom_html_table_element *) (o), \ + (dom_html_table_element *) (n)) -bool table_rows_callback(struct dom_node_internal *node, void *ctx); -bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx); -dom_exception dom_html_table_element_create_t_body( - dom_html_table_element *element, - dom_html_table_section_element **t_body); +#endif diff --git a/src/html/html_tablecaption_element.c b/src/html/html_tablecaption_element.c index 5a4b1b19..cae229c2 100644 --- a/src/html/html_tablecaption_element.c +++ b/src/html/html_tablecaption_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_table_caption_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_table_caption_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_table_caption_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_table_caption_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_table_caption_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_table_caption_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_table_caption_element_copy_internal( + dom_html_table_caption_element *old, + dom_html_table_caption_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_tablecaption_element.h b/src/html/html_tablecaption_element.h index 971c55cc..3d658069 100644 --- a/src/html/html_tablecaption_element.h +++ b/src/html/html_tablecaption_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_table_caption_element_copy(dom_node_internal *old, _dom_virtual_html_table_caption_element_destroy, \ _dom_html_table_caption_element_copy +/* Helper functions*/ +dom_exception _dom_html_table_caption_element_copy_internal( + dom_html_table_caption_element *old, + dom_html_table_caption_element *new); +#define dom_html_table_caption_element_copy_internal(o, n) \ + _dom_html_table_caption_element_copy_internal( \ + (dom_html_table_caption_element *) (o), \ + (dom_html_table_caption_element *) (n)) + #endif diff --git a/src/html/html_tablecell_element.c b/src/html/html_tablecell_element.c index c106b4f7..7a1f9680 100644 --- a/src/html/html_tablecell_element.c +++ b/src/html/html_tablecell_element.c @@ -110,10 +110,39 @@ void _dom_virtual_html_table_cell_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_table_cell_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_table_cell_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_table_cell_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_table_cell_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_table_cell_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_table_cell_element_copy_internal( + dom_html_table_cell_element *old, + dom_html_table_cell_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_tablecell_element.h b/src/html/html_tablecell_element.h index 5f403734..2874a82a 100644 --- a/src/html/html_tablecell_element.h +++ b/src/html/html_tablecell_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_table_cell_element_copy(dom_node_internal *old, _dom_virtual_html_table_cell_element_destroy, \ _dom_html_table_cell_element_copy +/* Helper functions*/ +dom_exception _dom_html_table_cell_element_copy_internal( + dom_html_table_cell_element *old, + dom_html_table_cell_element *new); +#define dom_html_table_cell_element_copy_internal(o, n) \ + _dom_html_table_cell_element_copy_internal( \ + (dom_html_table_cell_element *) (o), \ + (dom_html_table_cell_element *) (n)) + #endif diff --git a/src/html/html_tablecol_element.c b/src/html/html_tablecol_element.c index 5df6d5b3..74169be5 100644 --- a/src/html/html_tablecol_element.c +++ b/src/html/html_tablecol_element.c @@ -133,10 +133,39 @@ void _dom_virtual_html_table_col_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_table_col_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_table_col_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_table_col_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_table_col_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_table_col_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_table_col_element_copy_internal( + dom_html_table_col_element *old, + dom_html_table_col_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_tablecol_element.h b/src/html/html_tablecol_element.h index adfca2f6..5aa04621 100644 --- a/src/html/html_tablecol_element.h +++ b/src/html/html_tablecol_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_table_col_element_copy(dom_node_internal *old, _dom_virtual_html_table_col_element_destroy, \ _dom_html_table_col_element_copy +/* Helper functions*/ +dom_exception _dom_html_table_col_element_copy_internal( + dom_html_table_col_element *old, + dom_html_table_col_element *new); +#define dom_html_table_col_element_copy_internal(o, n) \ + _dom_html_table_col_element_copy_internal( \ + (dom_html_table_col_element *) (o), \ + (dom_html_table_col_element *) (n)) + #endif diff --git a/src/html/html_tablerow_element.c b/src/html/html_tablerow_element.c index 0d4f3eb1..b722d0d5 100644 --- a/src/html/html_tablerow_element.c +++ b/src/html/html_tablerow_element.c @@ -112,10 +112,39 @@ void _dom_virtual_html_table_row_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_table_row_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_table_row_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_table_row_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_table_row_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_table_row_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_table_row_element_copy_internal( + dom_html_table_row_element *old, + dom_html_table_row_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ @@ -288,7 +317,7 @@ dom_exception dom_html_table_row_element_get_section_row_index( * \param ctx The dom_html_document object (void *) * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ -bool table_cells_callback(struct dom_node_internal *node, void *ctx) +static bool table_cells_callback(struct dom_node_internal *node, void *ctx) { dom_html_document *doc = ctx; if (node->type == DOM_ELEMENT_NODE && diff --git a/src/html/html_tablerow_element.h b/src/html/html_tablerow_element.h index ee081baa..5c8a4e44 100644 --- a/src/html/html_tablerow_element.h +++ b/src/html/html_tablerow_element.h @@ -48,6 +48,14 @@ dom_exception _dom_html_table_row_element_copy(dom_node_internal *old, _dom_virtual_html_table_row_element_destroy, \ _dom_html_table_row_element_copy +/* Helper functions*/ +dom_exception _dom_html_table_row_element_copy_internal( + dom_html_table_row_element *old, + dom_html_table_row_element *new); +#define dom_html_table_row_element_copy_internal(o, n) \ + _dom_html_table_row_element_copy_internal( \ + (dom_html_table_row_element *) (o), \ + (dom_html_table_row_element *) (n)) + #endif -bool table_cells_callback(struct dom_node_internal *node, void *ctx); diff --git a/src/html/html_tablesection_element.c b/src/html/html_tablesection_element.c index d570e1ca..1ffe1029 100644 --- a/src/html/html_tablesection_element.c +++ b/src/html/html_tablesection_element.c @@ -113,10 +113,39 @@ void _dom_virtual_html_table_section_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_table_section_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_table_section_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_table_section_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_table_section_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_table_section_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_table_section_element_copy_internal( + dom_html_table_section_element *old, + dom_html_table_section_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ @@ -164,7 +193,7 @@ SIMPLE_GET_SET(ch_off); SIMPLE_GET_SET(v_align); /* The callback function for _dom_html_collection_create*/ -bool table_section_callback(struct dom_node_internal *node, void *ctx) +static bool table_section_callback(struct dom_node_internal *node, void *ctx) { dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && diff --git a/src/html/html_tablesection_element.h b/src/html/html_tablesection_element.h index 6985abdd..b25eea38 100644 --- a/src/html/html_tablesection_element.h +++ b/src/html/html_tablesection_element.h @@ -49,6 +49,14 @@ dom_exception _dom_html_table_section_element_copy(dom_node_internal *old, _dom_virtual_html_table_section_element_destroy, \ _dom_html_table_section_element_copy +/* Helper functions*/ +dom_exception _dom_html_table_section_element_copy_internal( + dom_html_table_section_element *old, + dom_html_table_section_element *new); +#define dom_html_table_section_element_copy_internal(o, n) \ + _dom_html_table_section_element_copy_internal( \ + (dom_html_table_section_element *) (o), \ + (dom_html_table_section_element *) (n)) + #endif -bool table_section_callback(struct dom_node_internal *node, void *ctx); diff --git a/src/html/html_text_area_element.c b/src/html/html_text_area_element.c index bbc97896..6117e839 100644 --- a/src/html/html_text_area_element.c +++ b/src/html/html_text_area_element.c @@ -301,10 +301,48 @@ void _dom_virtual_html_text_area_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_text_area_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_text_area_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_text_area_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_text_area_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_text_area_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_text_area_element_copy_internal( + dom_html_text_area_element *old, + dom_html_text_area_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + /* TODO: We don't seem to keep a ref to form element, so just + * copy the pointer for now. */ + new->form = old->form; + + new->default_value = dom_string_ref(old->default_value); + new->default_value_set = old->default_value_set; + new->value = dom_string_ref(old->value); + new->value_set = old->value_set; + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_text_area_element.h b/src/html/html_text_area_element.h index 5c7b4206..bfbd77ea 100644 --- a/src/html/html_text_area_element.h +++ b/src/html/html_text_area_element.h @@ -54,6 +54,15 @@ dom_exception _dom_html_text_area_element_copy(dom_node_internal *old, _dom_virtual_html_text_area_element_destroy, \ _dom_html_text_area_element_copy +/* Helper functions*/ +dom_exception _dom_html_text_area_element_copy_internal( + dom_html_text_area_element *old, + dom_html_text_area_element *new); +#define dom_html_text_area_element_copy_internal(o, n) \ + _dom_html_text_area_element_copy_internal( \ + (dom_html_text_area_element *) (o), \ + (dom_html_text_area_element *) (n)) + /* Internal function for bindings */ dom_exception _dom_html_text_area_element_set_form( diff --git a/src/html/html_title_element.c b/src/html/html_title_element.c index 02c78207..39e898af 100644 --- a/src/html/html_title_element.c +++ b/src/html/html_title_element.c @@ -109,10 +109,39 @@ void _dom_virtual_html_title_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_title_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_title_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_title_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_title_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_title_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_title_element_copy_internal( + dom_html_title_element *old, + dom_html_title_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_title_element.h b/src/html/html_title_element.h index 1a7653a5..620171e7 100644 --- a/src/html/html_title_element.h +++ b/src/html/html_title_element.h @@ -48,5 +48,14 @@ dom_exception _dom_html_title_element_copy(dom_node_internal *old, _dom_virtual_html_title_element_destroy, \ _dom_html_title_element_copy +/* Helper functions*/ +dom_exception _dom_html_title_element_copy_internal( + dom_html_title_element *old, + dom_html_title_element *new); +#define dom_html_title_element_copy_internal(o, n) \ + _dom_html_title_element_copy_internal( \ + (dom_html_title_element *) (o), \ + (dom_html_title_element *) (n)) + #endif diff --git a/src/html/html_ulist_element.c b/src/html/html_ulist_element.c index 624c85f6..f2b87fb2 100644 --- a/src/html/html_ulist_element.c +++ b/src/html/html_ulist_element.c @@ -133,10 +133,39 @@ void _dom_virtual_html_u_list_element_destroy(dom_node_internal *node) } /* The virtual copy function, see src/core/node.c for detail */ -dom_exception _dom_html_u_list_element_copy(dom_node_internal *old, - dom_node_internal **copy) +dom_exception _dom_html_u_list_element_copy( + dom_node_internal *old, dom_node_internal **copy) { - return _dom_html_element_copy(old, copy); + dom_html_u_list_element *new_node; + dom_exception err; + + new_node = malloc(sizeof(dom_html_u_list_element)); + if (new_node == NULL) + return DOM_NO_MEM_ERR; + + err = dom_html_u_list_element_copy_internal(old, new_node); + if (err != DOM_NO_ERR) { + free(new_node); + return err; + } + + *copy = (dom_node_internal *) new_node; + + return DOM_NO_ERR; +} + +dom_exception _dom_html_u_list_element_copy_internal( + dom_html_u_list_element *old, + dom_html_u_list_element *new) +{ + dom_exception err; + + err = dom_html_element_copy_internal(old, new); + if (err != DOM_NO_ERR) { + return err; + } + + return DOM_NO_ERR; } /*-----------------------------------------------------------------------*/ diff --git a/src/html/html_ulist_element.h b/src/html/html_ulist_element.h index 6e7e6f9e..55419521 100644 --- a/src/html/html_ulist_element.h +++ b/src/html/html_ulist_element.h @@ -49,4 +49,13 @@ dom_exception _dom_html_u_list_element_copy(dom_node_internal *old, _dom_virtual_html_u_list_element_destroy, \ _dom_html_u_list_element_copy +/* Helper functions*/ +dom_exception _dom_html_u_list_element_copy_internal( + dom_html_u_list_element *old, + dom_html_u_list_element *new); +#define dom_html_u_list_element_copy_internal(o, n) \ + _dom_html_u_list_element_copy_internal( \ + (dom_html_u_list_element *) (o), \ + (dom_html_u_list_element *) (n)) + #endif |