You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by db...@apache.org on 2005/06/06 19:41:43 UTC
svn commit: r180348 [2/2] - in /xerces/c/trunk/src/xercesc: framework/
framework/psvi/ internal/ parsers/ util/ util/regx/ validators/datatype/
validators/schema/ validators/schema/identity/
Modified: xerces/c/trunk/src/xercesc/util/XMLString.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLString.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLString.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLString.cpp Mon Jun 6 10:41:39 2005
@@ -43,6 +43,7 @@
#include <xercesc/util/XMLUniDefs.hpp>
#include <xercesc/util/XMLUni.hpp>
#include <xercesc/util/XMLUri.hpp>
+#include <xercesc/util/XMLURL.hpp>
#include <xercesc/internal/XMLReader.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -647,32 +648,37 @@
(colPos == nameLen - 1) ) // <URI>':'
return false;
- // Examine URI
- if (colPos > 0)
+
+ // Examine localpart
+ if (!XMLString::isValidNCName(&name[colPos+1]))
+ {
+ return false;
+ }
+ else if (colPos == 0)
+ {
+ return true;
+ }
+ else
{
- XMLCh* temp = (XMLCh*) &(name[colPos]);
- *temp = 0;
+ // Examine URI
+ XMLCh* const temp =
+ (XMLCh*) manager->allocate((colPos + 1) * sizeof(XMLCh));
+ const ArrayJanitor<XMLCh> jan(temp, manager);
+
+ copyNString(temp, name, colPos);
+ temp[colPos] = 0;
try
{
- XMLUri newURI(name, manager); // no relative uri support here
- *temp = chColon;
+ XMLUri newURI(temp, manager); // no relative uri support here
}
- catch(const OutOfMemoryException&)
+ catch (const MalformedURLException&)
{
- *temp = chColon;
return false;
}
- catch (...)
- {
- *temp = chColon;
- return false;
- }
- }
-
- // Examine localpart
- return XMLString::isValidNCName(&(name[colPos+1]));
+ return true;
+ }
}
@@ -1662,7 +1668,7 @@
(
(strLen+1) * sizeof(XMLCh)
);//new XMLCh[strLen+1];
- XMLCh* retPtr = &(retBuf[0]);
+ XMLCh* retPtr = &retBuf[0];
XMLCh* startPtr = toConvert;
while ( *startPtr )
@@ -1762,7 +1768,7 @@
(
(endPtr - startPtr + 1) * sizeof(XMLCh)
);//new XMLCh[endPtr - startPtr + 1];
- XMLCh* retPtr = &(retBuf[0]);
+ XMLCh* retPtr = &retBuf[0];
bool inSpace = false;
while (startPtr < endPtr)
{
@@ -1809,7 +1815,7 @@
(
(XMLString::stringLen(toConvert) + 1) * sizeof(XMLCh)
);//new XMLCh[ XMLString::stringLen(toConvert) + 1];
- XMLCh* retPtr = &(retBuf[0]);
+ XMLCh* retPtr = &retBuf[0];
XMLCh* startPtr = toConvert;
while (*startPtr)
Modified: xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp Mon Jun 6 10:41:39 2005
@@ -54,6 +54,7 @@
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
+#include <xercesc/util/Janitor.hpp>
#include <xercesc/util/XMLStringTokenizer.hpp>
#include <xercesc/util/XMLUniDefs.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
@@ -71,6 +72,9 @@
// ---------------------------------------------------------------------------
// XMLStringTokenizer: Constructors and Destructor
// ---------------------------------------------------------------------------
+
+typedef JanitorMemFunCall<XMLStringTokenizer> CleanupType;
+
XMLStringTokenizer::XMLStringTokenizer( const XMLCh* const srcStr
, MemoryManager* const manager)
: fOffset(0)
@@ -80,6 +84,8 @@
, fTokens(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XMLStringTokenizer::cleanUp);
+
try {
if (fStringLen > 0) {
fTokens = new (fMemoryManager) RefArrayVectorOf<XMLCh>(4, true, fMemoryManager);
@@ -87,11 +93,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...) {
- cleanUp();
- }
+
+ cleanup.release();
}
XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr,
@@ -104,6 +111,8 @@
, fTokens(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XMLStringTokenizer::cleanUp);
+
try {
@@ -114,11 +123,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...) {
- cleanUp();
- }
+
+ cleanup.release();
}
XMLStringTokenizer::~XMLStringTokenizer()
Modified: xerces/c/trunk/src/xercesc/util/XMLURL.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLURL.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLURL.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLURL.cpp Mon Jun 6 10:41:39 2005
@@ -164,6 +164,8 @@
{
}
+typedef JanitorMemFunCall<XMLURL> CleanupType;
+
XMLURL::XMLURL(const XMLCh* const baseURL
, const XMLCh* const relativeURL
, MemoryManager* const manager) :
@@ -180,19 +182,20 @@
, fURLText(0)
, fHasInvalidChar(false)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
try
{
setURL(baseURL, relativeURL);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...)
- {
- cleanup();
- throw;
- }
+
+ cleanup.release();
}
XMLURL::XMLURL(const XMLCh* const baseURL
@@ -211,6 +214,8 @@
, fURLText(0)
, fHasInvalidChar(false)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
XMLCh* tmpRel = XMLString::transcode(relativeURL, fMemoryManager);
ArrayJanitor<XMLCh> janRel(tmpRel, fMemoryManager);
try
@@ -219,13 +224,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...)
- {
- cleanup();
- throw;
- }
+
+ cleanup.release();
}
XMLURL::XMLURL(const XMLURL& baseURL
@@ -243,19 +247,20 @@
, fURLText(0)
, fHasInvalidChar(false)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
try
{
setURL(baseURL, relativeURL);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...)
- {
- cleanup();
- throw;
- }
+
+ cleanup.release();
}
XMLURL::XMLURL(const XMLURL& baseURL
@@ -273,6 +278,8 @@
, fURLText(0)
, fHasInvalidChar(false)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
XMLCh* tmpRel = XMLString::transcode(relativeURL, fMemoryManager);
ArrayJanitor<XMLCh> janRel(tmpRel, fMemoryManager);
try
@@ -281,14 +288,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...)
- {
- cleanup();
+ cleanup.release();
+
throw;
}
+ cleanup.release();
}
XMLURL::XMLURL(const XMLCh* const urlText,
@@ -306,19 +311,20 @@
, fURLText(0)
, fHasInvalidChar(false)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
try
{
setURL(urlText);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...)
- {
- cleanup();
- throw;
- }
+
+ cleanup.release();
}
XMLURL::XMLURL(const char* const urlText,
@@ -336,6 +342,8 @@
, fURLText(0)
, fHasInvalidChar(false)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
XMLCh* tmpText = XMLString::transcode(urlText, fMemoryManager);
ArrayJanitor<XMLCh> janRel(tmpText, fMemoryManager);
try
@@ -344,13 +352,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...)
- {
- cleanup();
- throw;
- }
+
+ cleanup.release();
}
XMLURL::XMLURL(const XMLURL& toCopy) :
@@ -367,6 +374,8 @@
, fURLText(0)
, fHasInvalidChar(toCopy.fHasInvalidChar)
{
+ CleanupType cleanup(this, &XMLURL::cleanUp);
+
try
{
fFragment = XMLString::replicate(toCopy.fFragment, fMemoryManager);
@@ -379,18 +388,17 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...)
- {
- cleanup();
- throw;
- }
+
+ cleanup.release();
}
XMLURL::~XMLURL()
{
- cleanup();
+ cleanUp();
}
@@ -403,7 +411,7 @@
return *this;
// Clean up our stuff
- cleanup();
+ cleanUp();
// And copy his stuff
fMemoryManager = toAssign.fMemoryManager;
@@ -473,14 +481,14 @@
//
// Try to parse the URL.
//
- cleanup();
+ cleanUp();
parse(urlText);
}
void XMLURL::setURL(const XMLCh* const baseURL
, const XMLCh* const relativeURL)
{
- cleanup();
+ cleanUp();
// Parse our URL string
parse(relativeURL);
@@ -496,7 +504,7 @@
XMLURL basePart(baseURL, fMemoryManager);
if (!conglomerateWithBase(basePart, false))
{
- cleanup();
+ cleanUp();
ThrowXMLwithMemMgr(MalformedURLException, XMLExcepts::URL_RelativeBaseURL, fMemoryManager);
}
}
@@ -510,7 +518,7 @@
, const XMLCh* const relativeURL
, XMLURL& xmlURL)
{
- cleanup();
+ cleanUp();
// Parse our URL string
if (parse(relativeURL, xmlURL))
@@ -535,7 +543,7 @@
void XMLURL::setURL(const XMLURL& baseURL
, const XMLCh* const relativeURL)
{
- cleanup();
+ cleanUp();
// Parse our URL string
parse(relativeURL);
@@ -765,7 +773,7 @@
// Just a central place to handle cleanup, since its done from a number
// of different spots.
//
-void XMLURL::cleanup()
+void XMLURL::cleanUp()
{
fMemoryManager->deallocate(fFragment);//delete [] fFragment;
fMemoryManager->deallocate(fHost);//delete [] fHost;
Modified: xerces/c/trunk/src/xercesc/util/XMLURL.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLURL.hpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLURL.hpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLURL.hpp Mon Jun 6 10:41:39 2005
@@ -155,7 +155,7 @@
// Private helper methods
// -----------------------------------------------------------------------
void buildFullText();
- void cleanup();
+ void cleanUp();
bool conglomerateWithBase(const XMLURL& baseURL, bool useExceptions=true);
void parse
(
Modified: xerces/c/trunk/src/xercesc/util/XMLUri.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLUri.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLUri.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLUri.cpp Mon Jun 6 10:41:39 2005
@@ -236,6 +236,9 @@
// XMLUri: Constructors and Helper methods
// ---------------------------------------------------------------------------
// ctor# 2
+
+typedef JanitorMemFunCall<XMLUri> CleanupType;
+
XMLUri::XMLUri(const XMLCh* const uriSpec,
MemoryManager* const manager)
: fPort(-1)
@@ -249,18 +252,19 @@
, fURIText(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XMLUri::cleanUp);
+
try {
initialize((XMLUri *)0, uriSpec);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...)
- {
- cleanUp();
- throw;
- }
+
+ cleanup.release();
}
// ctor# 7 relative ctor
@@ -278,18 +282,19 @@
, fURIText(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XMLUri::cleanUp);
+
try {
initialize(baseURI, uriSpec);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...)
- {
- cleanUp();
- throw;
- }
+
+ cleanup.release();
}
//Copy constructor
@@ -307,36 +312,39 @@
, fURIText(0)
, fMemoryManager(toCopy.fMemoryManager)
{
+ CleanupType cleanup(this, &XMLUri::cleanUp);
+
try {
initialize(toCopy);
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- cleanUp();
+ cleanup.release();
+
throw;
}
+ cleanup.release();
}
XMLUri& XMLUri::operator=(const XMLUri& toAssign)
{
cleanUp();
+
+ CleanupType cleanup(this, &XMLUri::cleanUp);
+
try {
initialize(toAssign);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...)
- {
- cleanUp();
- throw;
- }
+
+ cleanup.release();
+
return *this;
}
@@ -788,18 +796,7 @@
if (portStr && *portStr)
{
- try
- {
- port = XMLString::parseInt(portStr, fMemoryManager);
- }
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch (...)
- {
- throw;
- }
+ port = XMLString::parseInt(portStr, fMemoryManager);
}
} // if > 0
@@ -1144,18 +1141,7 @@
, fMemoryManager);
}
- try
- {
- isConformantUserInfo(newUserInfo, fMemoryManager);
- }
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch (...)
- {
- throw;
- }
+ isConformantUserInfo(newUserInfo, fMemoryManager);
if (getUserInfo())
{
@@ -2587,4 +2573,3 @@
}
XERCES_CPP_NAMESPACE_END
-
Modified: xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp Mon Jun 6 10:41:39 2005
@@ -56,6 +56,9 @@
// ---------------------------------------------------------------------------
// BMPattern: Constructors
// ---------------------------------------------------------------------------
+
+typedef JanitorMemFunCall<BMPattern> CleanupType;
+
BMPattern::BMPattern( const XMLCh* const pattern
, bool ignoreCase
, MemoryManager* const manager) :
@@ -67,19 +70,20 @@
, fUppercasePattern(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &BMPattern::cleanUp);
+
try {
fPattern = XMLString::replicate(pattern, fMemoryManager);
initialize();
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...) {
- cleanUp();
- throw;
- }
+ cleanup.release();
}
BMPattern::BMPattern( const XMLCh* const pattern
@@ -94,19 +98,20 @@
, fUppercasePattern(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &BMPattern::cleanUp);
+
try {
fPattern = XMLString::replicate(pattern, fMemoryManager);
initialize();
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...) {
- cleanUp();
- throw;
- }
+ cleanup.release();
}
BMPattern::~BMPattern() {
Modified: xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp Mon Jun 6 10:41:39 2005
@@ -100,6 +100,7 @@
#include <xercesc/util/XMLRegisterCleanup.hpp>
#include <xercesc/util/StringPool.hpp>
#include <xercesc/util/XMLInitializer.hpp>
+#include <xercesc/util/OutOfMemoryException.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -170,6 +171,9 @@
// ---------------------------------------------------------------------------
// RangeTokenMap: Constructors and Destructor
// ---------------------------------------------------------------------------
+
+typedef JanitorMemFunCall<RangeTokenMap> CleanupType;
+
RangeTokenMap::RangeTokenMap(MemoryManager* manager) :
fTokenRegistry(0)
, fRangeMap(0)
@@ -177,6 +181,8 @@
, fTokenFactory(0)
, fMutex(manager)
{
+ CleanupType cleanup(this, &RangeTokenMap::cleanUp);
+
try {
fTokenRegistry = new (manager) RefHashTableOf<RangeTokenElemMap>(109, manager);
fRangeMap = new (manager) RefHashTableOf<RangeFactory>(29, manager);
@@ -184,25 +190,19 @@
fTokenFactory = new (manager) TokenFactory(manager);
initializeRegistry();
}
- catch(...) {
- cleanUp();
+ catch(const OutOfMemoryException&)
+ {
+ cleanup.release();
+
throw;
}
+
+ cleanup.release();
}
RangeTokenMap::~RangeTokenMap() {
- delete fTokenRegistry;
- fTokenRegistry = 0;
-
- delete fRangeMap;
- fRangeMap = 0;
-
- delete fCategories;
- fCategories = 0;
-
- delete fTokenFactory;
- fTokenFactory = 0;
+ cleanUp();
}
// ---------------------------------------------------------------------------
Modified: xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp Mon Jun 6 10:41:39 2005
@@ -256,6 +256,9 @@
// ---------------------------------------------------------------------------
// RegularExpression: Constructors and Destructors
// ---------------------------------------------------------------------------
+
+typedef JanitorMemFunCall<RegularExpression> CleanupType;
+
RegularExpression::RegularExpression(const char* const pattern,
MemoryManager* const manager)
:fHasBackReferences(false),
@@ -274,6 +277,8 @@
fTokenFactory(0),
fMemoryManager(manager)
{
+ CleanupType cleanup(this, &RegularExpression::cleanUp);
+
try {
XMLCh* tmpBuf = XMLString::transcode(pattern, fMemoryManager);
@@ -282,13 +287,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...) {
- cleanUp();
- throw;
- }
+ cleanup.release();
}
RegularExpression::RegularExpression(const char* const pattern,
@@ -310,6 +314,8 @@
fTokenFactory(0),
fMemoryManager(manager)
{
+ CleanupType cleanup(this, &RegularExpression::cleanUp);
+
try {
XMLCh* tmpBuf = XMLString::transcode(pattern, fMemoryManager);
@@ -320,13 +326,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...) {
- cleanUp();
- throw;
- }
+ cleanup.release();
}
@@ -348,19 +353,20 @@
fTokenFactory(0),
fMemoryManager(manager)
{
+ CleanupType cleanup(this, &RegularExpression::cleanUp);
+
try {
setPattern(pattern);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...) {
- cleanUp();
- throw;
- }
+ cleanup.release();
}
RegularExpression::RegularExpression(const XMLCh* const pattern,
@@ -382,19 +388,20 @@
fTokenFactory(0),
fMemoryManager(manager)
{
+ CleanupType cleanup(this, &RegularExpression::cleanUp);
+
try {
setPattern(pattern, options);
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch (...) {
- cleanUp();
- throw;
- }
+ cleanup.release();
}
RegularExpression::~RegularExpression() {
@@ -1567,7 +1574,6 @@
}
-
/*
* Prepares for matching. This method is called during construction.
*/
@@ -1655,7 +1661,7 @@
if (isSet(fOptions, USE_UNICODE_CATEGORY)) {
- if (fWordRange == 0) {
+ if (fWordRange == 0) {
fWordRange = fTokenFactory->getRange(fgUniIsWord);
if (fWordRange == 0)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -118,18 +118,7 @@
, MemoryManager* const manager)
:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::AnyURI, manager)
{
- try
- {
- init(enums, manager);
- }
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch (...)
- {
- throw;
- }
+ init(enums, manager);
}
DatatypeValidator* AnyURIDatatypeValidator::newInstance(
Modified: xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -109,6 +109,7 @@
XMLDateTime* DateDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -116,15 +117,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void DateDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -119,6 +119,7 @@
XMLDateTime* DateTimeDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -126,15 +127,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void DateTimeDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -109,6 +109,7 @@
XMLDateTime* DayDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -116,15 +117,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void DayDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -112,6 +112,7 @@
XMLDateTime* DurationDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -119,15 +120,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void DurationDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -430,6 +430,7 @@
{
// ask the itemType for a complete check
BaseRefVectorOf<XMLCh>* tempList = XMLString::tokenizeString(getEnumeration()->elementAt(i), manager);
+ Janitor<BaseRefVectorOf<XMLCh> > jan(tempList);
int tokenNumber = tempList->size();
try
@@ -439,15 +440,10 @@
}
catch(const OutOfMemoryException&)
{
+ jan.release();
+
throw;
}
- catch (...)
- {
- delete tempList;
- throw;
- }
-
- delete tempList;
// enum shall pass this->checkContent() as well.
checkContent(getEnumeration()->elementAt(i), (ValidationContext*)0, false, manager);
Modified: xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -109,6 +109,7 @@
XMLDateTime* MonthDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -116,15 +117,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void MonthDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -109,6 +109,7 @@
XMLDateTime* MonthDayDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -116,15 +117,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void MonthDayDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -122,6 +122,7 @@
XMLDateTime* TimeDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -129,15 +130,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void TimeDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -173,6 +173,8 @@
fMemberTypeValidators = memberTypeValidators;
}
+typedef JanitorMemFunCall<UnionDatatypeValidator> CleanupType;
+
UnionDatatypeValidator::UnionDatatypeValidator(
DatatypeValidator* const baseValidator
, RefHashTableOf<KVStringPair>* const facets
@@ -210,19 +212,22 @@
, manager);
}
+ CleanupType cleanup(this, &UnionDatatypeValidator::cleanUp);
+
try
{
init(baseValidator, facets, enums, manager);
}
catch(const OutOfMemoryException&)
{
+ // Don't cleanup when out of memory, since executing the
+ // code can cause problems.
+ cleanup.release();
+
throw;
}
- catch (...)
- {
- cleanUp();
- throw;
- }
+
+ cleanup.release();
}
void UnionDatatypeValidator::init(DatatypeValidator* const baseValidator
Modified: xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -109,6 +109,7 @@
XMLDateTime* YearDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -116,15 +117,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void YearDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp Mon Jun 6 10:41:39 2005
@@ -109,6 +109,7 @@
XMLDateTime* YearMonthDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager)
{
XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager);
+ Janitor<XMLDateTime> jan(pRetDate);
try
{
@@ -116,15 +117,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch (...)
- {
- delete pRetDate;
+ jan.release();
+
throw;
}
- return pRetDate;
+ return jan.release();
}
void YearMonthDatatypeValidator::parse(XMLDateTime* const pDate)
Modified: xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp Mon Jun 6 10:41:39 2005
@@ -138,6 +138,8 @@
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<SchemaGrammar> CleanupType;
+
// ---------------------------------------------------------------------------
// SchemaGrammar: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -160,6 +162,8 @@
, fValidated(false)
, fDatatypeRegistry(manager)
{
+ CleanupType cleanup(this, &SchemaGrammar::cleanUp);
+
//
// Init all the pool members.
//
@@ -195,13 +199,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- cleanUp();
throw;
}
+
+ cleanup.release();
}
SchemaGrammar::~SchemaGrammar()
Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp Mon Jun 6 10:41:39 2005
@@ -158,6 +158,8 @@
ENUM_ELT_SIZE
};
+typedef JanitorMemFunCall<TraverseSchema> CleanupType;
+
// ---------------------------------------------------------------------------
// TraverseSchema: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -219,6 +221,7 @@
, fAnnotation(0)
, fAttributeCheck(manager)
{
+ CleanupType cleanup(this, &TraverseSchema::cleanUp);
try {
@@ -232,13 +235,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- cleanUp();
throw;
}
+
+ cleanup.release();
}
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp Mon Jun 6 10:41:39 2005
@@ -52,10 +52,13 @@
// Includes
// ---------------------------------------------------------------------------
#include <xercesc/validators/schema/identity/FieldValueMap.hpp>
+#include <xercesc/util/Janitor.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<FieldValueMap> CleanupType;
+
// ---------------------------------------------------------------------------
// FieldValueMap: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -74,34 +77,41 @@
, fValues(0)
, fMemoryManager(other.fMemoryManager)
{
- try {
- if (other.fFields) {
+ if (other.fFields) {
+ CleanupType cleanup(this, &FieldValueMap::cleanUp);
+
+ try {
+
+ unsigned int valuesSize = other.fValues->size();
- unsigned int valuesSize = other.fValues->size();
+ fFields = new (fMemoryManager) ValueVectorOf<IC_Field*>(*(other.fFields));
+ fValidators = new (fMemoryManager) ValueVectorOf<DatatypeValidator*>(*(other.fValidators));
+ fValues = new (fMemoryManager) RefArrayVectorOf<XMLCh>(other.fFields->curCapacity(), true, fMemoryManager);
- fFields = new (fMemoryManager) ValueVectorOf<IC_Field*>(*(other.fFields));
- fValidators = new (fMemoryManager) ValueVectorOf<DatatypeValidator*>(*(other.fValidators));
- fValues = new (fMemoryManager) RefArrayVectorOf<XMLCh>(other.fFields->curCapacity(), true, fMemoryManager);
-
- for (unsigned int i=0; i<valuesSize; i++) {
- fValues->addElement(XMLString::replicate(other.fValues->elementAt(i), fMemoryManager));
- }
+ for (unsigned int i=0; i<valuesSize; i++) {
+ fValues->addElement(XMLString::replicate(other.fValues->elementAt(i), fMemoryManager));
+ }
+ }
+ catch(const OutOfMemoryException&)
+ {
+ cleanup.release();
+
+ throw;
}
- }
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch(...) {
- delete fFields;
- delete fValidators;
- delete fValues;
- throw;
+ cleanup.release();
}
}
FieldValueMap::~FieldValueMap()
+{
+ cleanUp();
+}
+
+// ---------------------------------------------------------------------------
+// FieldValueMap: Private helper methods.
+// ---------------------------------------------------------------------------
+void FieldValueMap::cleanUp()
{
delete fFields;
delete fValidators;
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp Mon Jun 6 10:41:39 2005
@@ -75,6 +75,11 @@
private:
// -----------------------------------------------------------------------
+ // Private helper methods
+ // -----------------------------------------------------------------------
+ void cleanUp();
+
+ // -----------------------------------------------------------------------
// Unimplemented operators
// -----------------------------------------------------------------------
FieldValueMap& operator= (const FieldValueMap& other);
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp Mon Jun 6 10:41:39 2005
@@ -77,6 +77,8 @@
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<IdentityConstraint> CleanupType;
+
// ---------------------------------------------------------------------------
// IdentityConstraint: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -90,19 +92,20 @@
, fMemoryManager(manager)
, fNamespaceURI(-1)
{
+ CleanupType cleanup(this, &IdentityConstraint::cleanUp);
+
try {
fIdentityConstraintName = XMLString::replicate(identityConstraintName, fMemoryManager);
fElemName = XMLString::replicate(elemName, fMemoryManager);
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- cleanUp();
throw;
}
+
+ cleanup.release();
}
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp Mon Jun 6 10:41:39 2005
@@ -41,6 +41,8 @@
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<IdentityConstraintHandler> CleanupType;
+
// ---------------------------------------------------------------------------
// IdentityConstraintHandler: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -52,6 +54,7 @@
, fValueStoreCache(0)
, fFieldActivator(0)
{
+ CleanupType cleanup(this, &IdentityConstraintHandler::cleanUp);
try {
@@ -63,12 +66,12 @@
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...) {
- cleanUp();
- throw;
- }
+
+ cleanup.release();
}
IdentityConstraintHandler::~IdentityConstraintHandler()
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp Mon Jun 6 10:41:39 2005
@@ -65,6 +65,8 @@
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<ValueStoreCache> CleanupType;
+
// ---------------------------------------------------------------------------
// ValueStoreCache: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -76,17 +78,19 @@
, fScanner(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &ValueStoreCache::cleanUp);
+
try {
init();
}
catch(const OutOfMemoryException&)
{
+ cleanup.release();
+
throw;
}
- catch(...) {
- cleanUp();
- throw;
- }
+
+ cleanup.release();
}
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp Mon Jun 6 10:41:39 2005
@@ -73,6 +73,8 @@
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<XPathMatcher> CleanupType;
+
// ---------------------------------------------------------------------------
// XPathMatcher: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -87,18 +89,19 @@
, fIdentityConstraint(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XPathMatcher::cleanUp);
+
try {
init(xpath);
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- cleanUp();
throw;
}
+
+ cleanup.release();
}
@@ -114,18 +117,19 @@
, fIdentityConstraint(ic)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XPathMatcher::cleanUp);
+
try {
init(xpath);
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- cleanUp();
throw;
}
+
+ cleanup.release();
}
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp Mon Jun 6 10:41:39 2005
@@ -43,34 +43,47 @@
// Includes
// ---------------------------------------------------------------------------
#include <xercesc/validators/schema/identity/XPathMatcherStack.hpp>
+#include <xercesc/util/Janitor.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
XERCES_CPP_NAMESPACE_BEGIN
+typedef JanitorMemFunCall<XPathMatcherStack> CleanupType;
+
// ---------------------------------------------------------------------------
// XPathMatherStack: Constructors and Destructor
// ---------------------------------------------------------------------------
XPathMatcherStack::XPathMatcherStack(MemoryManager* const manager)
: fMatchersCount(0)
- , fContextStack(new (manager) ValueStackOf<int>(8, manager))
+ , fContextStack(0)
, fMatchers(0)
{
+ CleanupType cleanup(this, &XPathMatcherStack::cleanUp);
+
try {
+ fContextStack = new (manager) ValueStackOf<int>(8, manager);
fMatchers = new (manager) RefVectorOf<XPathMatcher>(8, true, manager);
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- delete fContextStack;
throw;
}
+
+ cleanup.release();
}
XPathMatcherStack::~XPathMatcherStack() {
+ cleanUp();
+}
+
+// ---------------------------------------------------------------------------
+// XPathMatcherStack: Private helper methods.
+// ---------------------------------------------------------------------------
+void XPathMatcherStack::cleanUp()
+{
delete fContextStack;
delete fMatchers;
}
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp Mon Jun 6 10:41:39 2005
@@ -63,6 +63,11 @@
private:
// -----------------------------------------------------------------------
+ // Private helper methods
+ // -----------------------------------------------------------------------
+ void cleanUp();
+
+ // -----------------------------------------------------------------------
// Unimplemented contstructors and operators
// -----------------------------------------------------------------------
XPathMatcherStack(const XPathMatcherStack& other);
Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp?rev=180348&r1=180347&r2=180348&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp Mon Jun 6 10:41:39 2005
@@ -346,6 +346,8 @@
{
}
+typedef JanitorMemFunCall<XercesXPath> CleanupType;
+
// ---------------------------------------------------------------------------
// XercesPath: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -360,6 +362,8 @@
, fLocationPaths(0)
, fMemoryManager(manager)
{
+ CleanupType cleanup(this, &XercesXPath::cleanUp);
+
try
{
fExpression = XMLString::replicate(xpathExpr, fMemoryManager);
@@ -371,13 +375,12 @@
}
catch(const OutOfMemoryException&)
{
- throw;
- }
- catch(...) {
+ cleanup.release();
- cleanUp();
throw;
}
+
+ cleanup.release();
}
XercesXPath::~XercesXPath() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org