summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <michael.drake@codethink.co.uk>2016-02-05 15:19:50 +0000
committerMichael Drake <michael.drake@codethink.co.uk>2016-02-05 15:19:50 +0000
commit89f73a033cd3398b1816903a6a0714d3aacee524 (patch)
treef4038e8d89723c309c4a07a8ad9428579be46970
parentb38b01741aa82b7bbc81fc36d34952be5a422c21 (diff)
downloadlibdom-89f73a033cd3398b1816903a6a0714d3aacee524.tar.gz
libdom-89f73a033cd3398b1816903a6a0714d3aacee524.tar.bz2
Fix: Implement HTMLElement copy constructor.
It can't just use the Element copy constructor, as there is aditional stuff in the HTMLElement struct.
-rw-r--r--src/html/html_element.c32
-rw-r--r--src/html/html_element.h6
2 files changed, 37 insertions, 1 deletions
diff --git a/src/html/html_element.c b/src/html/html_element.c
index 85380ff..65a75ca 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 92c96ab..0290569 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