diff --git a/samples/PSVIWriter/PSVIWriterHandlers.cpp b/samples/PSVIWriter/PSVIWriterHandlers.cpp index 5503621b6a380afb225d4b290590b4c5929ac218..115fe3c3ae512cab04f512e0d6a06d010bbe0c10 100644 --- a/samples/PSVIWriter/PSVIWriterHandlers.cpp +++ b/samples/PSVIWriter/PSVIWriterHandlers.cpp @@ -124,8 +124,8 @@ PSVIWriterHandlers::PSVIWriterHandlers(XMLFormatter* outputFormatter, XMLFormatt fErrorFormatter = (errorFormatter != NULL) ? errorFormatter : outputFormatter; fAttrList = new StringList(8, false); - fTempResult = new XMLCh[50]; - fIndentChars = new XMLCh[100]; + fTempResult = new XMLCh[51]; + fIndentChars = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate(101*sizeof(XMLCh)); fBaseUri = 0; XMLString::copyString(fIndentChars, XMLUni::fgZeroLenString); @@ -154,7 +154,7 @@ PSVIWriterHandlers::~PSVIWriterHandlers() { XMLString::release(&fBaseUri); delete fAttrList; delete[] fTempResult; - delete[] fIndentChars; + XMLPlatformUtils::fgMemoryManager->deallocate(fIndentChars); delete fIdMap; delete fDefinedIds; @@ -1574,10 +1574,16 @@ const XMLCh* PSVIWriterHandlers::getIdName(XSObject* obj) { } void PSVIWriterHandlers::incIndent() { - XMLCh tab[] = {chHTab, chNull}; - checkCapacity(fIndent, &fIndentCap, &fIndentChars); - XMLString::catString(fIndentChars, tab); - fIndent++; + XMLCh tab[] = {chHTab, chNull}; + if (fIndent >= fIndentCap) { + fIndentCap *= 2; + XMLCh* temp = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate((fIndentCap+1)*sizeof(XMLCh)); + XMLString::copyString(temp, fIndentChars); + XMLPlatformUtils::fgMemoryManager->deallocate(fIndentChars); + fIndentChars = temp; + } + XMLString::catString(fIndentChars, tab); + fIndent++; } void PSVIWriterHandlers::decIndent() { @@ -1585,16 +1591,3 @@ void PSVIWriterHandlers::decIndent() { fIndent--; } -void PSVIWriterHandlers::checkCapacity(unsigned int actual, unsigned int* capacity, XMLCh** buffer) { - if (actual >= *capacity) { - doubleCapacity(buffer, capacity); - } -} - -void PSVIWriterHandlers::doubleCapacity(XMLCh** buffer, unsigned int* bufferCap) { - *bufferCap *= 2; - XMLCh* temp = new XMLCh[*bufferCap]; - XMLString::copyString(temp, *buffer); - delete[] *buffer; - *buffer = temp; -} diff --git a/samples/PSVIWriter/PSVIWriterHandlers.hpp b/samples/PSVIWriter/PSVIWriterHandlers.hpp index ae710a1bd118cc0159be678047dfe12b717de04d..6d206c404d922a79d75f7e3350a731a6ec68e6a8 100644 --- a/samples/PSVIWriter/PSVIWriterHandlers.hpp +++ b/samples/PSVIWriter/PSVIWriterHandlers.hpp @@ -284,8 +284,6 @@ private: const XMLCh* getIdName(XSObject* obj); void incIndent(); void decIndent(); - void checkCapacity(unsigned int actual, unsigned int* capacity, XMLCh** buffer); - void doubleCapacity(XMLCh** buffer, unsigned int* bufferCap); protected: XMLFormatter* fFormatter; diff --git a/src/xercesc/internal/IGXMLScanner.cpp b/src/xercesc/internal/IGXMLScanner.cpp index 3fd8e63462c401b8d0be40d5f6572c1dd9fb73dd..9d9d2abc73f3b6e5a91602bd51a7a686dc31609e 100644 --- a/src/xercesc/internal/IGXMLScanner.cpp +++ b/src/xercesc/internal/IGXMLScanner.cpp @@ -2826,7 +2826,7 @@ bool IGXMLScanner::scanStartTagNS(bool& gotData) // if we have a PSVIHandler, now's the time to call // its handleAttributesPSVI method: - if(fPSVIHandler) + if(fPSVIHandler && fGrammarType == Grammar::SchemaGrammarType) { QName *eName = elemDecl->getElementName(); fPSVIHandler->handleAttributesPSVI diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp index 1b9b8df407c32ad41485a918bf8a7a205d892604..8d9d1caf0f48f1d5e0f8567f8bf7501ccff94307 100644 --- a/src/xercesc/internal/SGXMLScanner.cpp +++ b/src/xercesc/internal/SGXMLScanner.cpp @@ -2666,9 +2666,9 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs if(getPSVIHandler()) { psviAttr = fPSVIAttrList->getPSVIAttributeToFill(suffPtr, fURIStringPool->getValueForId(uriId)); - XSSimpleTypeDefinition *validatingType = (attrValidator) - ? (XSSimpleTypeDefinition *)fModel->getXSObject(attrValidator) - : 0; + XSSimpleTypeDefinition *validatingType = 0; + if (attrValidator && fModel) + validatingType = (XSSimpleTypeDefinition *)fModel->getXSObject(attrValidator); // no attribute declarations for these... psviAttr->reset( fRootElemName