17db96d56Sopenharmony_ci/* Copyright (c) 2005-2006 ActiveState Software Inc.
27db96d56Sopenharmony_ci *
37db96d56Sopenharmony_ci * Namespace all expat exported symbols to avoid dynamic loading symbol
47db96d56Sopenharmony_ci * collisions when embedding Python.
57db96d56Sopenharmony_ci *
67db96d56Sopenharmony_ci * The Problem:
77db96d56Sopenharmony_ci * - you embed Python in some app
87db96d56Sopenharmony_ci * - the app dynamically loads libexpat of version X
97db96d56Sopenharmony_ci * - the embedded Python imports pyexpat (which was built against
107db96d56Sopenharmony_ci *   libexpat version X+n)
117db96d56Sopenharmony_ci * --> pyexpat gets the expat symbols from the already loaded and *older*
127db96d56Sopenharmony_ci *     libexpat: crash (Specifically the crash we observed was in
137db96d56Sopenharmony_ci *     getting an old XML_ErrorString (from xmlparse.c) and then calling
147db96d56Sopenharmony_ci *     it with newer values in the XML_Error enum:
157db96d56Sopenharmony_ci *
167db96d56Sopenharmony_ci *       // pyexpat.c, line 1970
177db96d56Sopenharmony_ci *       ...
187db96d56Sopenharmony_ci *       // Added in Expat 1.95.7.
197db96d56Sopenharmony_ci *       MYCONST(XML_ERROR_UNBOUND_PREFIX);
207db96d56Sopenharmony_ci *       ...
217db96d56Sopenharmony_ci *
227db96d56Sopenharmony_ci *
237db96d56Sopenharmony_ci * The Solution:
247db96d56Sopenharmony_ci * Prefix all exported symbols with "PyExpat_". This is similar to
257db96d56Sopenharmony_ci * what Mozilla does for some common libs:
267db96d56Sopenharmony_ci * http://lxr.mozilla.org/seamonkey/source/modules/libimg/png/mozpngconf.h#115
277db96d56Sopenharmony_ci *
287db96d56Sopenharmony_ci * The list of relevant exported symbols can be had with this command:
297db96d56Sopenharmony_ci *
307db96d56Sopenharmony_ci       nm pyexpat.so \
317db96d56Sopenharmony_ci           | grep -v " [a-zBUA] " \
327db96d56Sopenharmony_ci           | grep -v "_fini\|_init\|initpyexpat"
337db96d56Sopenharmony_ci *
347db96d56Sopenharmony_ci * If any of those symbols are NOT prefixed with "PyExpat_" then
357db96d56Sopenharmony_ci * a #define should be added for it here.
367db96d56Sopenharmony_ci */
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci#ifndef PYEXPATNS_H
397db96d56Sopenharmony_ci#define PYEXPATNS_H
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci#define testingAccountingGetCountBytesDirect PyExpat_testingAccountingGetCountBytesDirect
427db96d56Sopenharmony_ci#define testingAccountingGetCountBytesIndirect PyExpat_testingAccountingGetCountBytesIndirect
437db96d56Sopenharmony_ci#define unsignedCharToPrintable PyExpat_unsignedCharToPrintable
447db96d56Sopenharmony_ci#define XML_DefaultCurrent              PyExpat_XML_DefaultCurrent
457db96d56Sopenharmony_ci#define XML_ErrorString                 PyExpat_XML_ErrorString
467db96d56Sopenharmony_ci#define XML_ExpatVersion                PyExpat_XML_ExpatVersion
477db96d56Sopenharmony_ci#define XML_ExpatVersionInfo            PyExpat_XML_ExpatVersionInfo
487db96d56Sopenharmony_ci#define XML_ExternalEntityParserCreate  PyExpat_XML_ExternalEntityParserCreate
497db96d56Sopenharmony_ci#define XML_FreeContentModel            PyExpat_XML_FreeContentModel
507db96d56Sopenharmony_ci#define XML_GetBase                     PyExpat_XML_GetBase
517db96d56Sopenharmony_ci#define XML_GetBuffer                   PyExpat_XML_GetBuffer
527db96d56Sopenharmony_ci#define XML_GetCurrentByteCount         PyExpat_XML_GetCurrentByteCount
537db96d56Sopenharmony_ci#define XML_GetCurrentByteIndex         PyExpat_XML_GetCurrentByteIndex
547db96d56Sopenharmony_ci#define XML_GetCurrentColumnNumber      PyExpat_XML_GetCurrentColumnNumber
557db96d56Sopenharmony_ci#define XML_GetCurrentLineNumber        PyExpat_XML_GetCurrentLineNumber
567db96d56Sopenharmony_ci#define XML_GetErrorCode                PyExpat_XML_GetErrorCode
577db96d56Sopenharmony_ci#define XML_GetFeatureList              PyExpat_XML_GetFeatureList
587db96d56Sopenharmony_ci#define XML_GetIdAttributeIndex         PyExpat_XML_GetIdAttributeIndex
597db96d56Sopenharmony_ci#define XML_GetInputContext             PyExpat_XML_GetInputContext
607db96d56Sopenharmony_ci#define XML_GetParsingStatus            PyExpat_XML_GetParsingStatus
617db96d56Sopenharmony_ci#define XML_GetSpecifiedAttributeCount  PyExpat_XML_GetSpecifiedAttributeCount
627db96d56Sopenharmony_ci#define XmlGetUtf16InternalEncoding     PyExpat_XmlGetUtf16InternalEncoding
637db96d56Sopenharmony_ci#define XmlGetUtf16InternalEncodingNS   PyExpat_XmlGetUtf16InternalEncodingNS
647db96d56Sopenharmony_ci#define XmlGetUtf8InternalEncoding      PyExpat_XmlGetUtf8InternalEncoding
657db96d56Sopenharmony_ci#define XmlGetUtf8InternalEncodingNS    PyExpat_XmlGetUtf8InternalEncodingNS
667db96d56Sopenharmony_ci#define XmlInitEncoding                 PyExpat_XmlInitEncoding
677db96d56Sopenharmony_ci#define XmlInitEncodingNS               PyExpat_XmlInitEncodingNS
687db96d56Sopenharmony_ci#define XmlInitUnknownEncoding          PyExpat_XmlInitUnknownEncoding
697db96d56Sopenharmony_ci#define XmlInitUnknownEncodingNS        PyExpat_XmlInitUnknownEncodingNS
707db96d56Sopenharmony_ci#define XML_MemFree                     PyExpat_XML_MemFree
717db96d56Sopenharmony_ci#define XML_MemMalloc                   PyExpat_XML_MemMalloc
727db96d56Sopenharmony_ci#define XML_MemRealloc                  PyExpat_XML_MemRealloc
737db96d56Sopenharmony_ci#define XML_Parse                       PyExpat_XML_Parse
747db96d56Sopenharmony_ci#define XML_ParseBuffer                 PyExpat_XML_ParseBuffer
757db96d56Sopenharmony_ci#define XML_ParserCreate                PyExpat_XML_ParserCreate
767db96d56Sopenharmony_ci#define XML_ParserCreate_MM             PyExpat_XML_ParserCreate_MM
777db96d56Sopenharmony_ci#define XML_ParserCreateNS              PyExpat_XML_ParserCreateNS
787db96d56Sopenharmony_ci#define XML_ParserFree                  PyExpat_XML_ParserFree
797db96d56Sopenharmony_ci#define XML_ParserReset                 PyExpat_XML_ParserReset
807db96d56Sopenharmony_ci#define XmlParseXmlDecl                 PyExpat_XmlParseXmlDecl
817db96d56Sopenharmony_ci#define XmlParseXmlDeclNS               PyExpat_XmlParseXmlDeclNS
827db96d56Sopenharmony_ci#define XmlPrologStateInit              PyExpat_XmlPrologStateInit
837db96d56Sopenharmony_ci#define XmlPrologStateInitExternalEntity    PyExpat_XmlPrologStateInitExternalEntity
847db96d56Sopenharmony_ci#define XML_ResumeParser                PyExpat_XML_ResumeParser
857db96d56Sopenharmony_ci#define XML_SetAttlistDeclHandler       PyExpat_XML_SetAttlistDeclHandler
867db96d56Sopenharmony_ci#define XML_SetBase                     PyExpat_XML_SetBase
877db96d56Sopenharmony_ci#define XML_SetBillionLaughsAttackProtectionActivationThreshold PyExpat_XML_SetBillionLaughsAttackProtectionActivationThreshold
887db96d56Sopenharmony_ci#define XML_SetBillionLaughsAttackProtectionMaximumAmplification PyExpat_XML_SetBillionLaughsAttackProtectionMaximumAmplification
897db96d56Sopenharmony_ci#define XML_SetCdataSectionHandler      PyExpat_XML_SetCdataSectionHandler
907db96d56Sopenharmony_ci#define XML_SetCharacterDataHandler     PyExpat_XML_SetCharacterDataHandler
917db96d56Sopenharmony_ci#define XML_SetCommentHandler           PyExpat_XML_SetCommentHandler
927db96d56Sopenharmony_ci#define XML_SetDefaultHandler           PyExpat_XML_SetDefaultHandler
937db96d56Sopenharmony_ci#define XML_SetDefaultHandlerExpand     PyExpat_XML_SetDefaultHandlerExpand
947db96d56Sopenharmony_ci#define XML_SetDoctypeDeclHandler       PyExpat_XML_SetDoctypeDeclHandler
957db96d56Sopenharmony_ci#define XML_SetElementDeclHandler       PyExpat_XML_SetElementDeclHandler
967db96d56Sopenharmony_ci#define XML_SetElementHandler           PyExpat_XML_SetElementHandler
977db96d56Sopenharmony_ci#define XML_SetEncoding                 PyExpat_XML_SetEncoding
987db96d56Sopenharmony_ci#define XML_SetEndCdataSectionHandler   PyExpat_XML_SetEndCdataSectionHandler
997db96d56Sopenharmony_ci#define XML_SetEndDoctypeDeclHandler    PyExpat_XML_SetEndDoctypeDeclHandler
1007db96d56Sopenharmony_ci#define XML_SetEndElementHandler        PyExpat_XML_SetEndElementHandler
1017db96d56Sopenharmony_ci#define XML_SetEndNamespaceDeclHandler  PyExpat_XML_SetEndNamespaceDeclHandler
1027db96d56Sopenharmony_ci#define XML_SetEntityDeclHandler        PyExpat_XML_SetEntityDeclHandler
1037db96d56Sopenharmony_ci#define XML_SetExternalEntityRefHandler PyExpat_XML_SetExternalEntityRefHandler
1047db96d56Sopenharmony_ci#define XML_SetExternalEntityRefHandlerArg  PyExpat_XML_SetExternalEntityRefHandlerArg
1057db96d56Sopenharmony_ci#define XML_SetHashSalt                 PyExpat_XML_SetHashSalt
1067db96d56Sopenharmony_ci#define XML_SetNamespaceDeclHandler     PyExpat_XML_SetNamespaceDeclHandler
1077db96d56Sopenharmony_ci#define XML_SetNotationDeclHandler      PyExpat_XML_SetNotationDeclHandler
1087db96d56Sopenharmony_ci#define XML_SetNotStandaloneHandler     PyExpat_XML_SetNotStandaloneHandler
1097db96d56Sopenharmony_ci#define XML_SetParamEntityParsing       PyExpat_XML_SetParamEntityParsing
1107db96d56Sopenharmony_ci#define XML_SetProcessingInstructionHandler PyExpat_XML_SetProcessingInstructionHandler
1117db96d56Sopenharmony_ci#define XML_SetReturnNSTriplet          PyExpat_XML_SetReturnNSTriplet
1127db96d56Sopenharmony_ci#define XML_SetSkippedEntityHandler     PyExpat_XML_SetSkippedEntityHandler
1137db96d56Sopenharmony_ci#define XML_SetStartCdataSectionHandler PyExpat_XML_SetStartCdataSectionHandler
1147db96d56Sopenharmony_ci#define XML_SetStartDoctypeDeclHandler  PyExpat_XML_SetStartDoctypeDeclHandler
1157db96d56Sopenharmony_ci#define XML_SetStartElementHandler      PyExpat_XML_SetStartElementHandler
1167db96d56Sopenharmony_ci#define XML_SetStartNamespaceDeclHandler    PyExpat_XML_SetStartNamespaceDeclHandler
1177db96d56Sopenharmony_ci#define XML_SetUnknownEncodingHandler   PyExpat_XML_SetUnknownEncodingHandler
1187db96d56Sopenharmony_ci#define XML_SetUnparsedEntityDeclHandler    PyExpat_XML_SetUnparsedEntityDeclHandler
1197db96d56Sopenharmony_ci#define XML_SetUserData                 PyExpat_XML_SetUserData
1207db96d56Sopenharmony_ci#define XML_SetXmlDeclHandler           PyExpat_XML_SetXmlDeclHandler
1217db96d56Sopenharmony_ci#define XmlSizeOfUnknownEncoding        PyExpat_XmlSizeOfUnknownEncoding
1227db96d56Sopenharmony_ci#define XML_StopParser                  PyExpat_XML_StopParser
1237db96d56Sopenharmony_ci#define XML_UseForeignDTD               PyExpat_XML_UseForeignDTD
1247db96d56Sopenharmony_ci#define XML_UseParserAsHandlerArg       PyExpat_XML_UseParserAsHandlerArg
1257db96d56Sopenharmony_ci#define XmlUtf16Encode                  PyExpat_XmlUtf16Encode
1267db96d56Sopenharmony_ci#define XmlUtf8Encode                   PyExpat_XmlUtf8Encode
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci#endif /* !PYEXPATNS_H */
1307db96d56Sopenharmony_ci
131