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]