peiyongz 2003/03/09 08:40:47 Modified: c/src/xercesc/util XMLException.cpp PlatformUtils.hpp PlatformUtils.cpp Makefile.in Log: PanicHandler Revision Changes Path 1.5 +2 -2 xml-xerces/c/src/xercesc/util/XMLException.cpp Index: XMLException.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLException.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XMLException.cpp 7 Mar 2003 18:11:55 -0000 1.4 +++ XMLException.cpp 9 Mar 2003 16:40:47 -0000 1.5 @@ -144,7 +144,7 @@ { sMsgLoader = XMLPlatformUtils::loadMsgSet(XMLUni::fgExceptDomain); if (!sMsgLoader) - XMLPlatformUtils::panic(XMLPlatformUtils::Panic_CantLoadMsgDomain); + XMLPlatformUtils::panic(PanicHandler::Panic_CantLoadMsgDomain); // // Register this XMLMsgLoader for cleanup at Termination. 1.11 +31 -25 xml-xerces/c/src/xercesc/util/PlatformUtils.hpp Index: PlatformUtils.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/PlatformUtils.hpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- PlatformUtils.hpp 7 Mar 2003 18:11:54 -0000 1.10 +++ PlatformUtils.hpp 9 Mar 2003 16:40:47 -0000 1.11 @@ -64,6 +64,7 @@ #include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/XMLException.hpp> +#include <xercesc/util/PanicHandler.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -71,7 +72,6 @@ class XMLNetAccessor; class XMLTransService; - // // For internal use only // @@ -103,21 +103,6 @@ class XMLUTIL_EXPORT XMLPlatformUtils { public : - /** @name Public Types */ - //@{ - enum PanicReasons - { - Panic_NoTransService - , Panic_NoDefTranscoder - , Panic_CantFindLib - , Panic_UnknownMsgDomain - , Panic_CantLoadMsgDomain - , Panic_SynchronizationErr - , Panic_SystemInit - - , PanicReasons_Count - }; - //@} /** @name Public Static Data */ //@{ @@ -148,6 +133,18 @@ */ static XMLTransService* fgTransService; + /** The Panic Handler + * + * This is the application provided panic handler. + */ + static PanicHandler* fgUserPanicHandler; + + /** The Panic Handler + * + * This is the default panic handler. + */ + static PanicHandler* fgDefaultPanicHandler; + //@} @@ -175,9 +172,14 @@ * the discussion above with regard to locale, applies to this nlsHome * as well. * + * panicHandler: application's panic handler, application owns this handler. + * Application shall make sure that the plugged panic handler persists + * through the call to XMLPlatformUtils::terminate(). + * */ - static void Initialize(const char* const locale = XMLUni::fgXercescDefaultLocale - , const char* const nlsHome = 0); + static void Initialize(const char* const locale = XMLUni::fgXercescDefaultLocale + , const char* const nlsHome = 0 + , PanicHandler* const panicHandler = 0); /** Perform per-process parser termination * @@ -193,17 +195,21 @@ * to get transcoding up or get message loading working, we call * this method.</p> * - * Each platform can implement it however they want. This method is - * expected to display something meaningful and end the process. The - * enum indicates why its being called, to allow the per-platform code - * to display or log something more specific if desired.</p> - * + * Each platform can implement it however they want. This method will + * delegate the panic handling to a user specified panic handler or + * in the absence of it, the default panic handler. + * + * In case the default panic handler does not support a particular + * platform, the platform specific panic hanlding shall be implemented + * here </p>. + * * @param reason The enumeration that defines the cause of the failure */ static void panic ( - const PanicReasons reason + const PanicHandler::PanicReasons reason ); + //@} /** @name File Methods */ 1.8 +32 -7 xml-xerces/c/src/xercesc/util/PlatformUtils.cpp Index: PlatformUtils.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/PlatformUtils.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- PlatformUtils.cpp 17 Feb 2003 19:54:47 -0000 1.7 +++ PlatformUtils.cpp 9 Mar 2003 16:40:47 -0000 1.8 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2003/03/09 16:40:47 peiyongz + * PanicHandler + * * Revision 1.7 2003/02/17 19:54:47 peiyongz * Allow set user specified error message file location in PlatformUtils::Initialize(). * @@ -158,6 +161,8 @@ #include <xercesc/internal/XMLReader.hpp> #include <xercesc/util/RuntimeException.hpp> #include <xercesc/util/XMLRegisterCleanup.hpp> +#include <xercesc/util/DefaultPanicHandler.hpp> + #include <limits.h> XERCES_CPP_NAMESPACE_BEGIN @@ -185,7 +190,7 @@ // static data cleanup list // --------------------------------------------------------------------------- XMLRegisterCleanup* gXMLCleanupList = 0; -XMLMutex* gXMLCleanupListMutex = 0; +XMLMutex* gXMLCleanupListMutex = 0; // --------------------------------------------------------------------------- @@ -193,14 +198,15 @@ // --------------------------------------------------------------------------- XMLNetAccessor* XMLPlatformUtils::fgNetAccessor = 0; XMLTransService* XMLPlatformUtils::fgTransService = 0; - - +PanicHandler* XMLPlatformUtils::fgUserPanicHandler = 0; +PanicHandler* XMLPlatformUtils::fgDefaultPanicHandler = 0; // --------------------------------------------------------------------------- // XMLPlatformUtils: Init/term methods // --------------------------------------------------------------------------- -void XMLPlatformUtils::Initialize(const char* const locale - , const char* const nlsHome) +void XMLPlatformUtils::Initialize(const char* const locale + , const char* const nlsHome + , PanicHandler* const panicHandler) { // // Effects of overflow: @@ -225,6 +231,19 @@ if (gInitFlag > 1) return; + /*** + * Panic Handler: + * + ***/ + if (!panicHandler) + { + fgDefaultPanicHandler = new DefaultPanicHandler(); + } + else + { + fgUserPanicHandler = panicHandler; + } + // // Call the platform init method, which is implemented in each of the // per-platform implementation cpp files. This one does the very low @@ -253,7 +272,7 @@ fgTransService = makeTransService(); if (!fgTransService) - panic(Panic_NoTransService); + panic(PanicHandler::Panic_NoTransService); // Initialize the transcoder service fgTransService->initTransService(); @@ -265,7 +284,7 @@ // XMLLCPTranscoder* defXCode = XMLPlatformUtils::fgTransService->makeNewLCPTranscoder(); if (!defXCode) - panic(Panic_NoDefTranscoder); + panic(PanicHandler::Panic_NoDefTranscoder); XMLString::initString(defXCode); // @@ -283,6 +302,7 @@ ***/ XMLMsgLoader::setLocale(locale); XMLMsgLoader::setNLSHome(nlsHome); + } @@ -346,6 +366,11 @@ ***/ XMLMsgLoader::setLocale(0); XMLMsgLoader::setNLSHome(0); + + if (fgDefaultPanicHandler) + { + delete fgDefaultPanicHandler; + } // And say we are no longer initialized gInitFlag = 0; 1.28 +7 -0 xml-xerces/c/src/xercesc/util/Makefile.in Index: Makefile.in =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Makefile.in,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- Makefile.in 20 Feb 2003 18:06:55 -0000 1.27 +++ Makefile.in 9 Mar 2003 16:40:47 -0000 1.28 @@ -55,6 +55,9 @@ # # # $Log$ +# Revision 1.28 2003/03/09 16:40:47 peiyongz +# PanicHandler +# # Revision 1.27 2003/02/20 18:06:55 peiyongz # Bug#7077: build error message shared library for ICUMsgLoader # @@ -431,6 +434,7 @@ BitOps.hpp \ BitSet.hpp \ CountedPointer.hpp \ + DefaultPanicHandler.hpp \ EmptyStackException.hpp \ EncodingValidator.hpp \ FlagJanitor.hpp \ @@ -452,6 +456,7 @@ NoSuchElementException.hpp \ NullPointerException.hpp \ NumberFormatException.hpp \ + PanicHandler.hpp \ ParseException.hpp \ PlatformUtils.hpp \ QName.hpp \ @@ -541,6 +546,7 @@ BinInputStream.$(TO) \ BinMemInputStream.$(TO) \ BitSet.$(TO) \ + DefaultPanicHandler.$(TO) \ EncodingValidator.$(TO) \ HashPtr.$(TO) \ HashXMLCh.$(TO) \ @@ -548,6 +554,7 @@ HexBin.$(TO) \ KVStringPair.$(TO) \ Mutexes.$(TO) \ + PanicHandler.$(TO) \ PlatformUtils.$(TO) \ QName.$(TO) \ StringPool.$(TO) \
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]