78 lines
3.2 KiB
Diff
78 lines
3.2 KiB
Diff
diff -urN XML-LibXML-2.0129.orig/LibXML.xs XML-LibXML-2.0129/LibXML.xs
|
|
--- XML-LibXML-2.0129.orig/LibXML.xs 2016-06-24 18:01:53.000000000 +0200
|
|
+++ XML-LibXML-2.0129/LibXML.xs 2017-07-13 12:41:48.000000000 +0200
|
|
@@ -4829,38 +4829,42 @@
|
|
PREINIT:
|
|
xmlNodePtr ret = NULL;
|
|
CODE:
|
|
- if ( self->type == XML_DOCUMENT_NODE ) {
|
|
- switch ( nNode->type ) {
|
|
- case XML_ELEMENT_NODE:
|
|
- warn("replaceChild with an element on a document node not supported yet!");
|
|
- XSRETURN_UNDEF;
|
|
- break;
|
|
- case XML_DOCUMENT_FRAG_NODE:
|
|
- warn("replaceChild with a document fragment node on a document node not supported yet!");
|
|
- XSRETURN_UNDEF;
|
|
- break;
|
|
- case XML_TEXT_NODE:
|
|
- case XML_CDATA_SECTION_NODE:
|
|
- warn("replaceChild with a text node not supported on a document node!");
|
|
- XSRETURN_UNDEF;
|
|
- break;
|
|
- default:
|
|
- break;
|
|
- }
|
|
- }
|
|
- ret = domReplaceChild( self, nNode, oNode );
|
|
- if (ret == NULL) {
|
|
- XSRETURN_UNDEF;
|
|
- }
|
|
- else {
|
|
- LibXML_reparent_removed_node(ret);
|
|
- RETVAL = PmmNodeToSv(ret, PmmOWNERPO(PmmPROXYNODE(ret)));
|
|
- if (nNode->type == XML_DTD_NODE) {
|
|
- LibXML_set_int_subset(nNode->doc, nNode);
|
|
+ if( nNode == oNode ) {
|
|
+ RETVAL = nNode;
|
|
+ }else{
|
|
+ if ( self->type == XML_DOCUMENT_NODE ) {
|
|
+ switch ( nNode->type ) {
|
|
+ case XML_ELEMENT_NODE:
|
|
+ warn("replaceChild with an element on a document node not supported yet!");
|
|
+ XSRETURN_UNDEF;
|
|
+ break;
|
|
+ case XML_DOCUMENT_FRAG_NODE:
|
|
+ warn("replaceChild with a document fragment node on a document node not supported yet!");
|
|
+ XSRETURN_UNDEF;
|
|
+ break;
|
|
+ case XML_TEXT_NODE:
|
|
+ case XML_CDATA_SECTION_NODE:
|
|
+ warn("replaceChild with a text node not supported on a document node!");
|
|
+ XSRETURN_UNDEF;
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
}
|
|
- if ( nNode->_private != NULL ) {
|
|
- PmmFixOwner( PmmPROXYNODE(nNode),
|
|
- PmmOWNERPO(PmmPROXYNODE(self)) );
|
|
+ ret = domReplaceChild( self, nNode, oNode );
|
|
+ if (ret == NULL) {
|
|
+ XSRETURN_UNDEF;
|
|
+ }
|
|
+ else {
|
|
+ LibXML_reparent_removed_node(ret);
|
|
+ RETVAL = PmmNodeToSv(ret, PmmOWNERPO(PmmPROXYNODE(ret)));
|
|
+ if (nNode->type == XML_DTD_NODE) {
|
|
+ LibXML_set_int_subset(nNode->doc, nNode);
|
|
+ }
|
|
+ if ( nNode->_private != NULL ) {
|
|
+ PmmFixOwner( PmmPROXYNODE(nNode),
|
|
+ PmmOWNERPO(PmmPROXYNODE(self)) );
|
|
+ }
|
|
}
|
|
}
|
|
OUTPUT:
|