summaryrefslogtreecommitdiff
path: root/src/html/html_input_element.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/html/html_input_element.c')
-rw-r--r--src/html/html_input_element.c47
1 files changed, 44 insertions, 3 deletions
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;
}
/*-----------------------------------------------------------------------*/