tng 2003/02/06 06:08:40
Modified: c/src/xercesc/dom/impl DOMDocumentImpl.cpp
Log:
restore the fDocType and fDocElement if replace failed.
Revision Changes Path
1.31 +18 -8 xml-xerces/c/src/xercesc/dom/impl/DOMDocumentImpl.cpp
Index: DOMDocumentImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMDocumentImpl.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- DOMDocumentImpl.cpp 5 Feb 2003 21:21:37 -0000 1.30
+++ DOMDocumentImpl.cpp 6 Feb 2003 14:08:39 -0000 1.31
@@ -493,19 +493,29 @@
DOMNode* DOMDocumentImpl::replaceChild(DOMNode *newChild, DOMNode *oldChild) {
+ DOMDocumentType* tempDocType = fDocType;
+ DOMElement* tempDocElement = fDocElement;
+
if(oldChild->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE)
fDocType=0;
else if(oldChild->getNodeType() == DOMNode::ELEMENT_NODE)
fDocElement=0;
- insertBefore(newChild, oldChild);
- // changed() already done.
+ try {
+ insertBefore(newChild, oldChild);
+ // changed() already done.
- if((oldChild->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE)
- || (oldChild->getNodeType() == DOMNode::ELEMENT_NODE))
- return fParent.removeChild(oldChild);
- else
- return removeChild(oldChild);
+ if((oldChild->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE)
+ || (oldChild->getNodeType() == DOMNode::ELEMENT_NODE))
+ return fParent.removeChild(oldChild);
+ else
+ return removeChild(oldChild);
+ }
+ catch(...) {
+ fDocType = tempDocType;
+ fDocElement = tempDocElement;
+ throw;
+ }
}
bool DOMDocumentImpl::isXMLName(const XMLCh *s)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]