Patch. Added const qualifiers in the parser where functions take an
xmlSAXHandler. This works since the parser doesn't need to change it, and
helps some people by putting their xmlSAXHandler instances in read-only
memory. Does not break existing uses of API. Simple patch follows.

Kind regards,
Vegard Nossum
diff -ru libxml2-2.6.26/include/libxml/parser.h libxml2-2.6.26-const/include/libxml/parser.h
--- libxml2-2.6.26/include/libxml/parser.h	2005-10-25 11:11:36.000000000 +0200
+++ libxml2-2.6.26-const/include/libxml/parser.h	2007-01-29 16:02:40.000000000 +0100
@@ -865,40 +865,40 @@
 		xmlParseExtParsedEnt	(xmlParserCtxtPtr ctxt);
 #ifdef LIBXML_SAX1_ENABLED
 XMLPUBFUN int XMLCALL		
-		xmlSAXUserParseFile	(xmlSAXHandlerPtr sax,
+		xmlSAXUserParseFile	(const xmlSAXHandlerPtr sax,
 					 void *user_data,
 					 const char *filename);
 XMLPUBFUN int XMLCALL		
-		xmlSAXUserParseMemory	(xmlSAXHandlerPtr sax,
+		xmlSAXUserParseMemory	(const xmlSAXHandlerPtr sax,
 					 void *user_data,
 					 const char *buffer,
 					 int size);
 XMLPUBFUN xmlDocPtr XMLCALL	
-		xmlSAXParseDoc		(xmlSAXHandlerPtr sax,
+		xmlSAXParseDoc		(const xmlSAXHandlerPtr sax,
 					 const xmlChar *cur,
 					 int recovery);
 XMLPUBFUN xmlDocPtr XMLCALL	
-		xmlSAXParseMemory	(xmlSAXHandlerPtr sax,
+		xmlSAXParseMemory	(const xmlSAXHandlerPtr sax,
 					 const char *buffer,
                                    	 int size,
 					 int recovery);
 XMLPUBFUN xmlDocPtr XMLCALL	
-		xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
+		xmlSAXParseMemoryWithData (const xmlSAXHandlerPtr sax,
 					 const char *buffer,
                                    	 int size,
 					 int recovery,
 					 void *data);
 XMLPUBFUN xmlDocPtr XMLCALL	
-		xmlSAXParseFile		(xmlSAXHandlerPtr sax,
+		xmlSAXParseFile		(const xmlSAXHandlerPtr sax,
 					 const char *filename,
 					 int recovery);
 XMLPUBFUN xmlDocPtr XMLCALL	
-		xmlSAXParseFileWithData	(xmlSAXHandlerPtr sax,
+		xmlSAXParseFileWithData	(const xmlSAXHandlerPtr sax,
 					 const char *filename,
 					 int recovery,
 					 void *data);
 XMLPUBFUN xmlDocPtr XMLCALL	
-		xmlSAXParseEntity	(xmlSAXHandlerPtr sax,
+		xmlSAXParseEntity	(const xmlSAXHandlerPtr sax,
 					 const char *filename);
 XMLPUBFUN xmlDocPtr XMLCALL	
 		xmlParseEntity		(const char *filename);
@@ -906,21 +906,21 @@
 
 #ifdef LIBXML_VALID_ENABLED
 XMLPUBFUN xmlDtdPtr XMLCALL	
-		xmlSAXParseDTD		(xmlSAXHandlerPtr sax,
+		xmlSAXParseDTD		(const xmlSAXHandlerPtr sax,
 					 const xmlChar *ExternalID,
 					 const xmlChar *SystemID);
 XMLPUBFUN xmlDtdPtr XMLCALL	
 		xmlParseDTD		(const xmlChar *ExternalID,
 					 const xmlChar *SystemID);
 XMLPUBFUN xmlDtdPtr XMLCALL	
-		xmlIOParseDTD		(xmlSAXHandlerPtr sax,
+		xmlIOParseDTD		(const xmlSAXHandlerPtr sax,
 					 xmlParserInputBufferPtr input,
 					 xmlCharEncoding enc);
 #endif /* LIBXML_VALID_ENABLE */
 #ifdef LIBXML_SAX1_ENABLED
 XMLPUBFUN int XMLCALL	
 		xmlParseBalancedChunkMemory(xmlDocPtr doc,
-					 xmlSAXHandlerPtr sax,
+					 const xmlSAXHandlerPtr sax,
 					 void *user_data,
 					 int depth,
 					 const xmlChar *string,
@@ -935,7 +935,7 @@
 #ifdef LIBXML_SAX1_ENABLED
 XMLPUBFUN int XMLCALL          
 		xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc,
-                     xmlSAXHandlerPtr sax,
+                     const xmlSAXHandlerPtr sax,
                      void *user_data,
                      int depth,
                      const xmlChar *string,
@@ -943,7 +943,7 @@
                      int recover);
 XMLPUBFUN int XMLCALL		
 		xmlParseExternalEntity	(xmlDocPtr doc,
-					 xmlSAXHandlerPtr sax,
+					 const xmlSAXHandlerPtr sax,
 					 void *user_data,
 					 int depth,
 					 const xmlChar *URL,
@@ -998,7 +998,7 @@
  * Interfaces for the Push mode.
  */
 XMLPUBFUN xmlParserCtxtPtr XMLCALL 
-		xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
+		xmlCreatePushParserCtxt(const xmlSAXHandlerPtr sax,
 					 void *user_data,
 					 const char *chunk,
 					 int size,
@@ -1015,7 +1015,7 @@
  */
 
 XMLPUBFUN xmlParserCtxtPtr XMLCALL 
-		xmlCreateIOParserCtxt	(xmlSAXHandlerPtr sax,
+		xmlCreateIOParserCtxt	(const xmlSAXHandlerPtr sax,
 					 void *user_data,
 					 xmlInputReadCallback   ioread,
 					 xmlInputCloseCallback  ioclose,
diff libxml2-2.6.26/parser.c libxml2-2.6.26-const/parser.c
--- libxml2-2.6.26/parser.c	2006-04-23 11:39:15.000000000 +0200
+++ libxml2-2.6.26-const/parser.c	2007-01-29 16:02:38.000000000 +0100
@@ -112,7 +112,7 @@
 
 static xmlParserErrors
 xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
-	              xmlSAXHandlerPtr sax,
+	              const xmlSAXHandlerPtr sax,
 		      void *user_data, int depth, const xmlChar *URL,
 		      const xmlChar *ID, xmlNodePtr *list);
 
@@ -10551,7 +10551,7 @@
  */
 
 xmlParserCtxtPtr
-xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data, 
+xmlCreatePushParserCtxt(const xmlSAXHandlerPtr sax, void *user_data, 
                         const char *chunk, int size, const char *filename) {
     xmlParserCtxtPtr ctxt;
     xmlParserInputPtr inputStream;
@@ -10696,7 +10696,7 @@
  * Returns the new parser context or NULL
  */
 xmlParserCtxtPtr
-xmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
+xmlCreateIOParserCtxt(const xmlSAXHandlerPtr sax, void *user_data,
 	xmlInputReadCallback   ioread, xmlInputCloseCallback  ioclose,
 	void *ioctx, xmlCharEncoding enc) {
     xmlParserCtxtPtr ctxt;
@@ -10763,7 +10763,7 @@
  */
 
 xmlDtdPtr
-xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
+xmlIOParseDTD(const xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
 	      xmlCharEncoding enc) {
     xmlDtdPtr ret = NULL;
     xmlParserCtxtPtr ctxt;
@@ -10880,7 +10880,7 @@
  */
 
 xmlDtdPtr
-xmlSAXParseDTD(xmlSAXHandlerPtr sax, const xmlChar *ExternalID,
+xmlSAXParseDTD(const xmlSAXHandlerPtr sax, const xmlChar *ExternalID,
                           const xmlChar *SystemID) {
     xmlDtdPtr ret = NULL;
     xmlParserCtxtPtr ctxt;
@@ -11209,7 +11209,7 @@
 
 static xmlParserErrors
 xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
-	              xmlSAXHandlerPtr sax,
+	              const xmlSAXHandlerPtr sax,
 		      void *user_data, int depth, const xmlChar *URL,
 		      const xmlChar *ID, xmlNodePtr *list) {
     xmlParserCtxtPtr ctxt;
@@ -11396,7 +11396,7 @@
  */
 
 int
-xmlParseExternalEntity(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data,
+xmlParseExternalEntity(xmlDocPtr doc, const xmlSAXHandlerPtr sax, void *user_data,
 	  int depth, const xmlChar *URL, const xmlChar *ID, xmlNodePtr *lst) {
     return(xmlParseExternalEntityPrivate(doc, NULL, sax, user_data, depth, URL,
 		                       ID, lst));
@@ -11423,7 +11423,7 @@
  */
 
 int
-xmlParseBalancedChunkMemory(xmlDocPtr doc, xmlSAXHandlerPtr sax,
+xmlParseBalancedChunkMemory(xmlDocPtr doc, const xmlSAXHandlerPtr sax,
      void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst) {
     return xmlParseBalancedChunkMemoryRecover( doc, sax, user_data,
                                                 depth, string, lst, 0 );
@@ -11829,7 +11829,7 @@
  * the parsed chunk is not well balanced. 
  */
 int
-xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax,
+xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, const xmlSAXHandlerPtr sax,
      void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst, 
      int recover) {
     xmlParserCtxtPtr ctxt;
@@ -11979,7 +11979,7 @@
  */
 
 xmlDocPtr
-xmlSAXParseEntity(xmlSAXHandlerPtr sax, const char *filename) {
+xmlSAXParseEntity(const xmlSAXHandlerPtr sax, const char *filename) {
     xmlDocPtr ret;
     xmlParserCtxtPtr ctxt;
 
@@ -12174,7 +12174,7 @@
  */
 
 xmlDocPtr
-xmlSAXParseFileWithData(xmlSAXHandlerPtr sax, const char *filename,
+xmlSAXParseFileWithData(const xmlSAXHandlerPtr sax, const char *filename,
                         int recovery, void *data) {
     xmlDocPtr ret;
     xmlParserCtxtPtr ctxt;
@@ -12242,7 +12242,7 @@
  */
 
 xmlDocPtr
-xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
+xmlSAXParseFile(const xmlSAXHandlerPtr sax, const char *filename,
                           int recovery) {
     return(xmlSAXParseFileWithData(sax,filename,recovery,NULL));
 }
@@ -12342,7 +12342,7 @@
  * Returns 0 in case of success or a error number otherwise
  */
 int
-xmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data,
+xmlSAXUserParseFile(const xmlSAXHandlerPtr sax, void *user_data,
                     const char *filename) {
     int ret = 0;
     xmlParserCtxtPtr ctxt;
@@ -12456,7 +12456,7 @@
  */
 
 xmlDocPtr
-xmlSAXParseMemoryWithData(xmlSAXHandlerPtr sax, const char *buffer,
+xmlSAXParseMemoryWithData(const xmlSAXHandlerPtr sax, const char *buffer,
 	          int size, int recovery, void *data) {
     xmlDocPtr ret;
     xmlParserCtxtPtr ctxt;
@@ -12505,7 +12505,7 @@
  * Returns the resulting document tree
  */
 xmlDocPtr
-xmlSAXParseMemory(xmlSAXHandlerPtr sax, const char *buffer,
+xmlSAXParseMemory(const xmlSAXHandlerPtr sax, const char *buffer,
 	          int size, int recovery) {
     return xmlSAXParseMemoryWithData(sax, buffer, size, recovery, NULL);
 }
@@ -12551,7 +12551,7 @@
  * 
  * Returns 0 in case of success or a error number otherwise
  */
-int xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data,
+int xmlSAXUserParseMemory(const xmlSAXHandlerPtr sax, void *user_data,
 			  const char *buffer, int size) {
     int ret = 0;
     xmlParserCtxtPtr ctxt;
@@ -12621,7 +12621,7 @@
  */
 
 xmlDocPtr
-xmlSAXParseDoc(xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) {
+xmlSAXParseDoc(const xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) {
     xmlDocPtr ret;
     xmlParserCtxtPtr ctxt;
     xmlSAXHandlerPtr oldsax = NULL;
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to