Author: jmb
Date: Sun Jun 26 15:39:45 2011
New Revision: 12511
URL:
http://source.netsurf-browser.org?rev=12511&view=rev
Log:
Fix up text node copy constructor
Modified:
branches/jmb/dom-alloc-purge/src/core/characterdata.c
branches/jmb/dom-alloc-purge/src/core/characterdata.h
branches/jmb/dom-alloc-purge/src/core/text.c
branches/jmb/dom-alloc-purge/src/core/text.h
Modified: branches/jmb/dom-alloc-purge/src/core/characterdata.c
URL:
http://source.netsurf-browser.org/branches/jmb/dom-alloc-purge/src/core/c...
==============================================================================
--- branches/jmb/dom-alloc-purge/src/core/characterdata.c (original)
+++ branches/jmb/dom-alloc-purge/src/core/characterdata.c Sun Jun 26 15:39:45 2011
@@ -448,22 +448,38 @@
/*----------------------------------------------------------------------*/
-/* The protected virtual functions of Node, see core/node.h for details
- *
- * @note: the three following API never be called directly from the virtual
- * functions dispatch mechanism, they are here for the code consistent.
- */
+/* The protected virtual functions of Node, see core/node.h for details */
void _dom_characterdata_destroy(struct dom_node_internal *node)
{
assert("Should never be here" == NULL);
UNUSED(node);
}
-/* The copy constructor of this class
- * The sub-class of characterdata should call this API */
+/* The copy constructor of this class */
dom_exception _dom_characterdata_copy(dom_node_internal *old,
dom_node_internal **copy)
{
- return _dom_node_copy(old, copy);
-}
-
+ dom_characterdata *new_node;
+ dom_exception err;
+
+ new_node = malloc(sizeof(dom_characterdata));
+ if (new_node == NULL)
+ return DOM_NO_MEM_ERR;
+
+ err = dom_characterdata_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_characterdata_copy_internal(dom_node_internal *old,
+ dom_node_internal *new)
+{
+ return dom_node_copy_internal(old, new);
+}
+
Modified: branches/jmb/dom-alloc-purge/src/core/characterdata.h
URL:
http://source.netsurf-browser.org/branches/jmb/dom-alloc-purge/src/core/c...
==============================================================================
--- branches/jmb/dom-alloc-purge/src/core/characterdata.h (original)
+++ branches/jmb/dom-alloc-purge/src/core/characterdata.h Sun Jun 26 15:39:45 2011
@@ -72,4 +72,10 @@
extern struct dom_characterdata_vtable characterdata_vtable;
+dom_exception _dom_characterdata_copy_internal(dom_node_internal *old,
+ dom_node_internal *new);
+#define dom_characterdata_copy_internal(o, n) \
+ _dom_characterdata_copy_internal( \
+ (dom_node_internal *) (o), (dom_node_internal *) (n))
+
#endif
Modified: branches/jmb/dom-alloc-purge/src/core/text.c
URL:
http://source.netsurf-browser.org/branches/jmb/dom-alloc-purge/src/core/t...
==============================================================================
--- branches/jmb/dom-alloc-purge/src/core/text.c (original)
+++ branches/jmb/dom-alloc-purge/src/core/text.c Sun Jun 26 15:39:45 2011
@@ -297,15 +297,27 @@
}
/* The copy constructor of this class */
-dom_exception _dom_text_copy(struct dom_node_internal *new,
- struct dom_node_internal *old)
+dom_exception _dom_text_copy(dom_node_internal *old, dom_node_internal **copy)
{
dom_text *ot = (dom_text *) old;
- dom_text *nt = (dom_text *) new;
-
- nt->element_content_whitespace = ot->element_content_whitespace;
-
- return _dom_characterdata_copy(new, old);
+ dom_text *new_text;
+ dom_exception err;
+
+ new_text = malloc(sizeof(dom_text));
+ if (new_text == NULL)
+ return DOM_NO_MEM_ERR;
+
+ err = dom_characterdata_copy_internal(old, new_text);
+ if (err != DOM_NO_ERR) {
+ free(new_text);
+ return err;
+ }
+
+ new_text->element_content_whitespace = ot->element_content_whitespace;
+
+ *copy = (dom_node_internal *) new_text;
+
+ return DOM_NO_ERR;
}
/*----------------------------------------------------------------------*/
Modified: branches/jmb/dom-alloc-purge/src/core/text.h
URL:
http://source.netsurf-browser.org/branches/jmb/dom-alloc-purge/src/core/t...
==============================================================================
--- branches/jmb/dom-alloc-purge/src/core/text.h (original)
+++ branches/jmb/dom-alloc-purge/src/core/text.h Sun Jun 26 15:39:45 2011
@@ -62,8 +62,7 @@
void __dom_text_destroy(struct dom_node_internal *node);
dom_exception _dom_text_alloc(struct dom_document *doc,
struct dom_node_internal *n, struct dom_node_internal **ret);
-dom_exception _dom_text_copy(struct dom_node_internal *new,
- struct dom_node_internal *old);
+dom_exception _dom_text_copy(dom_node_internal *old, dom_node_internal **copy);
#define DOM_TEXT_PROTECT_VTABLE \
__dom_text_destroy, \