summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2010-12-06 22:12:05 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2010-12-06 22:12:05 +0000
commitb5088a4a633af9184e711ac1cc000bf958eeca3b (patch)
treed345f036b4718830ec7d885671dec5e55a3bd03b /src
parent6123f0f475fcefff990360572ad7f306a2b62633 (diff)
downloadlibdom-b5088a4a633af9184e711ac1cc000bf958eeca3b.tar.gz
libdom-b5088a4a633af9184e711ac1cc000bf958eeca3b.tar.bz2
Fix copy constructors to actually copy all members, instead of leaving the majority of them uninitialised
svn path=/trunk/libdom/; revision=11023
Diffstat (limited to 'src')
-rw-r--r--src/core/attr.c11
-rw-r--r--src/core/node.c32
2 files changed, 30 insertions, 13 deletions
diff --git a/src/core/attr.c b/src/core/attr.c
index 4cd9e76..b280057 100644
--- a/src/core/attr.c
+++ b/src/core/attr.c
@@ -780,9 +780,18 @@ dom_exception _dom_attr_copy(struct dom_node_internal *new,
dom_attr *oa = (dom_attr *) old;
na->specified = oa->specified;
- na->is_id = oa->is_id;
/* TODO: deal with dom_type_info, it get no definition ! */
+ na->schema_type_info = NULL;
+
+ na->is_id = oa->is_id;
+
+ na->type = oa->type;
+
+ na->value = oa->value;
+
+ /* TODO: is this correct? */
+ na->read_only = false;
return _dom_node_copy(new, old);
}
diff --git a/src/core/node.c b/src/core/node.c
index d4007df..c10f740 100644
--- a/src/core/node.c
+++ b/src/core/node.c
@@ -1924,11 +1924,12 @@ dom_exception _dom_node_copy(dom_node_internal *new, dom_node_internal *old)
{
dom_exception err;
- new->vtable = old->vtable;
new->base.vtable = old->base.vtable;
+ new->vtable = old->vtable;
- assert(old->owner != NULL);
- assert(new->owner != NULL);
+ new->name = lwc_string_ref(old->name);
+
+ /* Value - see below */
new->type = old->type;
new->parent = NULL;
@@ -1936,20 +1937,31 @@ dom_exception _dom_node_copy(dom_node_internal *new, dom_node_internal *old)
new->last_child = NULL;
new->previous = NULL;
new->next = NULL;
- new->owner = old->owner;
- new->name = lwc_string_ref(old->name);
+ assert(old->owner != NULL);
+ assert(new->owner != NULL);
+ new->owner = old->owner;
if (old->namespace != NULL)
new->namespace = lwc_string_ref(old->namespace);
+ else
+ new->namespace = NULL;
if (old->prefix != NULL)
new->prefix = lwc_string_ref(old->prefix);
+ else
+ new->prefix = NULL;
- dom_alloc al;
- void *pw;
-
+ new->user_data = NULL;
+ new->refcnt = 1;
+
+ list_init(&new->pending_list);
+
+ /* Value */
if (old->value != NULL) {
+ dom_alloc al;
+ void *pw;
+
_dom_document_get_allocator(new->owner, &al, &pw);
dom_string *value;
err = dom_string_clone(al, pw, old->value, &value);
@@ -1961,10 +1973,6 @@ dom_exception _dom_node_copy(dom_node_internal *new, dom_node_internal *old)
new->value = NULL;
}
- new->user_data = NULL;
- new->refcnt = 1;
-
- list_init(&new->pending_list);
/* The new copyed node has no parent,
* so it should be put in the pending list. */
dom_node_mark_pending(new);