[XML-SIG] PyXML 0.5.5.1 extensions/pyexpat.c not ANSI C
Albert Chin-A-Young
china@thewrittenword.com
Sat, 2 Sep 2000 19:40:33 -0500
In PyXML 0.5.5.1, extensions/pyexpat.c contains:
staticforward struct HandlerInfo handler_info[];
This is not valid ANSI C. gcc -pedantic complains with:
array size missing
The Digital UNIX and IRIX C compilers failed to compile pyexpat.c
because of this. The following patch fixes things. What do you think?
--
albert chin (china@thewrittenword.com)
-- snip snip
--- extensions/pyexpat.c.orig Sat Sep 2 19:35:15 2000
+++ extensions/pyexpat.c Sat Sep 2 19:35:28 2000
@@ -59,6 +59,17 @@
/* ----------------------------------------------------- */
+/* Prototypes */
+
+void pyxml_SetEndCdataSection( XML_Parser *, void * );
+void pyxml_SetEndElementHandler( XML_Parser *, void * );
+void pyxml_SetEndNamespaceDeclHandler( XML_Parser *, void * );
+void pyxml_SetStartCdataSection( XML_Parser *, void * );
+void pyxml_SetStartElementHandler( XML_Parser *, void * );
+void pyxml_SetStartNamespaceDeclHandler( XML_Parser *, void * );
+
+/* ----------------------------------------------------- */
+
/* Declarations for objects of type xmlparser */
typedef struct {
@@ -79,8 +90,6 @@
xmlhandler handler;
};
-staticforward struct HandlerInfo handler_info[];
-
static PyObject *conv_atts( XML_Char **atts){
PyObject *attrs_obj=NULL;
XML_Char **attrs_p, **attrs_k;
@@ -122,6 +131,8 @@
clear_handlers(self);
}
+#define RC_HANDLER_PROTO( RC, NAME, PARAMS ) \
+static RC my_##NAME##Handler PARAMS;
#define RC_HANDLER( RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \
RETURN, GETUSERDATA) \
\
@@ -149,15 +160,106 @@
#define NOTHING /**/
+#define VOID_HANDLER_PROTO( NAME, PARAMS ) \
+ RC_HANDLER_PROTO( void, NAME, PARAMS )
#define VOID_HANDLER( NAME, PARAMS, PARAM_FORMAT ) \
RC_HANDLER( void, NAME, PARAMS, NOTHING, PARAM_FORMAT, NOTHING, NOTHING,\
(xmlparseobject *)userData )
+#define INT_HANDLER_PROTO( NAME, PARAMS ) \
+ RC_HANDLER_PROTO( int, NAME, PARAMS )
#define INT_HANDLER( NAME, PARAMS, PARAM_FORMAT )\
RC_HANDLER( int, NAME, PARAMS, int rc=0;, PARAM_FORMAT, \
rc = PyInt_AsLong( rv );, rc, \
(xmlparseobject *)userData )
+/* Prototypes for all handler functions */
+VOID_HANDLER_PROTO( StartElement,
+ (void *, const XML_Char *, const XML_Char **) )
+VOID_HANDLER_PROTO( EndElement,
+ (void *, const XML_Char *) )
+VOID_HANDLER_PROTO( ProcessingInstruction,
+ (void *, const XML_Char *, const XML_Char *) )
+VOID_HANDLER_PROTO( CharacterData,
+ (void *, const XML_Char *, int) )
+VOID_HANDLER_PROTO( UnparsedEntityDecl,
+ (void *, const XML_Char *, const XML_Char *,
+ const XML_Char *, const XML_Char *, const XML_Char *) )
+VOID_HANDLER_PROTO( NotationDecl,
+ (void *, const XML_Char *, const XML_Char *,
+ const XML_Char *, const XML_Char *) )
+VOID_HANDLER_PROTO( StartNamespaceDecl,
+ (void *, const XML_Char *, const XML_Char *) )
+VOID_HANDLER_PROTO( EndNamespaceDecl,
+ (void *, const XML_Char *) )
+VOID_HANDLER_PROTO( Comment,
+ (void *, const XML_Char *) )
+VOID_HANDLER_PROTO( StartCdataSection,
+ (void *) )
+VOID_HANDLER_PROTO( EndCdataSection,
+ (void *) )
+VOID_HANDLER_PROTO( Default,
+ (void *, const XML_Char *, int) )
+VOID_HANDLER_PROTO( DefaultHandlerExpand,
+ (void *, const XML_Char *, int) )
+INT_HANDLER_PROTO( NotStandalone,
+ (void *) )
+RC_HANDLER_PROTO( int, ExternalEntityRef,
+ (XML_Parser, const XML_Char *, const XML_Char *,
+ const XML_Char *, const XML_Char *) )
+
+static struct HandlerInfo handler_info[]=
+{{"StartElementHandler",
+ pyxml_SetStartElementHandler,
+ my_StartElementHandler},
+{"EndElementHandler",
+ pyxml_SetEndElementHandler,
+ my_EndElementHandler},
+{"ProcessingInstructionHandler",
+ (xmlhandlersetter)XML_SetProcessingInstructionHandler,
+ my_ProcessingInstructionHandler},
+{"CharacterDataHandler",
+ (xmlhandlersetter)XML_SetCharacterDataHandler,
+ my_CharacterDataHandler},
+{"UnparsedEntityDeclHandler",
+ (xmlhandlersetter)XML_SetUnparsedEntityDeclHandler,
+ my_UnparsedEntityDeclHandler },
+{"NotationDeclHandler",
+ (xmlhandlersetter)XML_SetNotationDeclHandler,
+ my_NotationDeclHandler },
+{"StartNamespaceDeclHandler",
+ pyxml_SetStartNamespaceDeclHandler,
+ my_StartNamespaceDeclHandler },
+{"EndNamespaceDeclHandler",
+ pyxml_SetEndNamespaceDeclHandler,
+ my_EndNamespaceDeclHandler },
+{"CommentHandler",
+ (xmlhandlersetter)XML_SetCommentHandler,
+ my_CommentHandler},
+{"StartCdataSectionHandler",
+ pyxml_SetStartCdataSection,
+ my_StartCdataSectionHandler},
+{"EndCdataSectionHandler",
+ pyxml_SetEndCdataSection,
+ my_EndCdataSectionHandler},
+{"DefaultHandler",
+ (xmlhandlersetter)XML_SetDefaultHandler,
+ my_DefaultHandler},
+{"DefaultHandlerExpand",
+ (xmlhandlersetter)XML_SetDefaultHandlerExpand,
+ my_DefaultHandlerExpandHandler},
+{"NotStandaloneHandler",
+ (xmlhandlersetter)XML_SetNotStandaloneHandler,
+ my_NotStandaloneHandler},
+{"ExternalEntityRefHandler",
+ (xmlhandlersetter)XML_SetExternalEntityRefHandler,
+ my_ExternalEntityRefHandler },
+
+{NULL, NULL, NULL } /* sentinel */
+};
+
+/* Handler functions */
+
VOID_HANDLER( StartElement,
(void *userData, const XML_Char *name, const XML_Char **atts ),
("(sO&)", name, conv_atts, atts ) )
@@ -827,55 +929,4 @@
StartCdataSection, EndCdataSection,
(pairsetter)XML_SetCdataSectionHandler);
}
-
-static struct HandlerInfo handler_info[]=
-{{"StartElementHandler",
- pyxml_SetStartElementHandler,
- my_StartElementHandler},
-{"EndElementHandler",
- pyxml_SetEndElementHandler,
- my_EndElementHandler},
-{"ProcessingInstructionHandler",
- (xmlhandlersetter)XML_SetProcessingInstructionHandler,
- my_ProcessingInstructionHandler},
-{"CharacterDataHandler",
- (xmlhandlersetter)XML_SetCharacterDataHandler,
- my_CharacterDataHandler},
-{"UnparsedEntityDeclHandler",
- (xmlhandlersetter)XML_SetUnparsedEntityDeclHandler,
- my_UnparsedEntityDeclHandler },
-{"NotationDeclHandler",
- (xmlhandlersetter)XML_SetNotationDeclHandler,
- my_NotationDeclHandler },
-{"StartNamespaceDeclHandler",
- pyxml_SetStartNamespaceDeclHandler,
- my_StartNamespaceDeclHandler },
-{"EndNamespaceDeclHandler",
- pyxml_SetEndNamespaceDeclHandler,
- my_EndNamespaceDeclHandler },
-{"CommentHandler",
- (xmlhandlersetter)XML_SetCommentHandler,
- my_CommentHandler},
-{"StartCdataSectionHandler",
- pyxml_SetStartCdataSection,
- my_StartCdataSectionHandler},
-{"EndCdataSectionHandler",
- pyxml_SetEndCdataSection,
- my_EndCdataSectionHandler},
-{"DefaultHandler",
- (xmlhandlersetter)XML_SetDefaultHandler,
- my_DefaultHandler},
-{"DefaultHandlerExpand",
- (xmlhandlersetter)XML_SetDefaultHandlerExpand,
- my_DefaultHandlerExpandHandler},
-{"NotStandaloneHandler",
- (xmlhandlersetter)XML_SetNotStandaloneHandler,
- my_NotStandaloneHandler},
-{"ExternalEntityRefHandler",
- (xmlhandlersetter)XML_SetExternalEntityRefHandler,
- my_ExternalEntityRefHandler },
-
-{NULL, NULL, NULL } /* sentinel */
-};
-