diff --git a/ChangeLog b/ChangeLog index 03459b64..76a7959e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Wed Nov 24 19:00:06 CET 1999 Daniel Veillard + + * tree.[ch] xmlIO.[ch] parser.c valid.c: code cleanup with -pedantic + * parser.[ch] encoding.[ch]: added memory cleanup routines + * parser.c: closing bug #3788 + * doc/*: rebuilt the doc + Tue Nov 23 11:23:55 CET 1999 Daniel Veillard * tree.[ch]: closing bug 3748, added xmlNewDocRawNode(), diff --git a/doc/html/gnome-xml-entities.html b/doc/html/gnome-xml-entities.html index 1ea56d9a..d6ac35bd 100644 --- a/doc/html/gnome-xml-entities.html +++ b/doc/html/gnome-xml-entities.html @@ -115,7 +115,7 @@ SIZE="3" >

Name

Synopsis

Description

Details





















Name

Synopsis

Description

Details


















Name

Synopsis

Description

Details






Name

Synopsis

Description

Details







xmlSubstituteEntitiesDefaultValue; +void xmlCleanupParser (void); int xmlParserInputRead

Description

Details














































xmlCleanupParser ()

void        xmlCleanupParser                (void);

Cleanup function for the XML parser. It tries to reclaim all +parsing related global memory allocated for the parser processing. +It doesn't deallocate any document related memory. Calling this +function should not prevent reusing the parser.









































Name

Synopsis

Description

Details























































































Name

Synopsis

xmlNodePtr cur); -const xmlChar* * xmlNodeGetLang ( (xmlNodePtr cur); @@ -1228,7 +1228,7 @@ HREF="gnome-xml-tree.html#XMLSETCOMPRESSMODE" >

Description

Details























































































the attribute value or NULL if not found.the attribute value or NULL if not found. +It's up to the caller to free the memory.










const xmlChar* xmlNodeGetLang               (*    xmlNodeGetLang                  (xmlNodePtr cur);
a pointer to the lang value, or NULL if not founda pointer to the lang value, or NULL if not found +It's up to the caller to free the memory.














Name

Synopsis

Description

Details

























































Name

Synopsis

Description

Details







Name

Synopsis

Description

Details















Name

Synopsis

Description

Details















+ diff --git a/encoding.c b/encoding.c index 50deb2c4..a27aa9d1 100644 --- a/encoding.c +++ b/encoding.c @@ -431,6 +431,29 @@ xmlInitCharEncodingHandlers(void) { #endif } +/** + * xmlCleanupCharEncodingHandlers: + * + * Cleanup the memory allocated for the char encoding support, it + * unregisters all the encoding handlers. + */ +void +xmlCleanupCharEncodingHandlers(void) { + if (handlers == NULL) return; + + for (;nbCharEncodingHandler > 0;) { + nbCharEncodingHandler--; + if (handlers[nbCharEncodingHandler] != NULL) { + xmlFree(handlers[nbCharEncodingHandler]->name); + xmlFree(handlers[nbCharEncodingHandler]); + } + } + xmlFree(handlers); + handlers = NULL; + nbCharEncodingHandler = 0; + xmlDefaultCharEncodingHandler = NULL; +} + /** * xmlRegisterCharEncodingHandler: * @handler: the xmlCharEncodingHandlerPtr handler block diff --git a/encoding.h b/encoding.h index 5181caff..6a423359 100644 --- a/encoding.h +++ b/encoding.h @@ -97,14 +97,14 @@ typedef struct xmlCharEncodingHandler { } xmlCharEncodingHandler; typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr; -void xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler); +void xmlInitCharEncodingHandlers (void); +void xmlCleanupCharEncodingHandlers (void); +void xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler); +xmlCharEncoding xmlDetectCharEncoding (const unsigned char* in); +xmlCharEncoding xmlParseCharEncoding (const char* name); xmlCharEncodingHandlerPtr xmlGetCharEncodingHandler(xmlCharEncoding enc); xmlCharEncodingHandlerPtr xmlFindCharEncodingHandler(const char *name); -xmlCharEncoding xmlDetectCharEncoding(const unsigned char* in); -xmlCharEncoding xmlParseCharEncoding(const char* name); - -void xmlInitCharEncodingHandlers(void); #ifdef __cplusplus } diff --git a/include/libxml/encoding.h b/include/libxml/encoding.h index 5181caff..6a423359 100644 --- a/include/libxml/encoding.h +++ b/include/libxml/encoding.h @@ -97,14 +97,14 @@ typedef struct xmlCharEncodingHandler { } xmlCharEncodingHandler; typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr; -void xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler); +void xmlInitCharEncodingHandlers (void); +void xmlCleanupCharEncodingHandlers (void); +void xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler); +xmlCharEncoding xmlDetectCharEncoding (const unsigned char* in); +xmlCharEncoding xmlParseCharEncoding (const char* name); xmlCharEncodingHandlerPtr xmlGetCharEncodingHandler(xmlCharEncoding enc); xmlCharEncodingHandlerPtr xmlFindCharEncodingHandler(const char *name); -xmlCharEncoding xmlDetectCharEncoding(const unsigned char* in); -xmlCharEncoding xmlParseCharEncoding(const char* name); - -void xmlInitCharEncodingHandlers(void); #ifdef __cplusplus } diff --git a/include/libxml/parser.h b/include/libxml/parser.h index 9ffab607..51797fdd 100644 --- a/include/libxml/parser.h +++ b/include/libxml/parser.h @@ -267,10 +267,14 @@ extern int xmlSubstituteEntitiesDefaultValue; #include "entities.h" #include "xml-error.h" +/** + * Cleanup + */ +void xmlCleanupParser (void); + /** * Input functions */ - int xmlParserInputRead (xmlParserInputPtr in, int len); int xmlParserInputGrow (xmlParserInputPtr in, diff --git a/include/libxml/tree.h b/include/libxml/tree.h index f5fcf57a..b6d030bc 100644 --- a/include/libxml/tree.h +++ b/include/libxml/tree.h @@ -464,7 +464,7 @@ void xmlNodeAddContentLen (xmlNodePtr cur, const xmlChar *content, int len); xmlChar * xmlNodeGetContent (xmlNodePtr cur); -const xmlChar * xmlNodeGetLang (xmlNodePtr cur); +xmlChar * xmlNodeGetLang (xmlNodePtr cur); void xmlNodeSetLang (xmlNodePtr cur, const xmlChar *lang); diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h index 58baeb01..2bdba5d8 100644 --- a/include/libxml/xmlIO.h +++ b/include/libxml/xmlIO.h @@ -52,7 +52,7 @@ int xmlParserInputBufferGrow (xmlParserInputBufferPtr in, int len); int xmlParserInputBufferPush (xmlParserInputBufferPtr in, int len, - char *buf); + const char *buf); void xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); char * xmlParserGetDirectory (const char *filename); diff --git a/parser.c b/parser.c index 4d84c8d6..7bbe088a 100644 --- a/parser.c +++ b/parser.c @@ -4437,6 +4437,7 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) { void xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const xmlChar *ExternalID, const xmlChar *SystemID) { + GROW; if ((CUR == '<') && (NXT(1) == '?') && (NXT(2) == 'x') && (NXT(3) == 'm') && (NXT(4) == 'l')) { @@ -6122,6 +6123,7 @@ xmlParseTry(xmlParserCtxtPtr ctxt) { case XML_PARSER_EPILOG: case XML_PARSER_COMMENT: case XML_PARSER_CDATA_SECTION: + break; } } return(ret); @@ -6141,8 +6143,9 @@ xmlParseTry(xmlParserCtxtPtr ctxt) { xmlParserErrors xmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size, int terminate) { - if ((size > 0) && (chunk != NULL)) { - xmlParserInputBufferPush(ctxt->input, size, chunk); + if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) && + (ctxt->input->buf != NULL)) { + xmlParserInputBufferPush(ctxt->input->buf, size, chunk); } return((xmlParserErrors) ctxt->errNo); } @@ -6725,6 +6728,19 @@ int xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data, * * ************************************************************************/ +/** + * xmlCleanupParser: + * + * Cleanup function for the XML parser. It tries to reclaim all + * parsing related global memory allocated for the parser processing. + * It doesn't deallocate any document related memory. Calling this + * function should not prevent reusing the parser. + */ + +void +xmlCleanupParser(void) { + xmlCleanupCharEncodingHandlers(); +} /** * xmlParserFindNodeInfo: diff --git a/parser.h b/parser.h index 9ffab607..51797fdd 100644 --- a/parser.h +++ b/parser.h @@ -267,10 +267,14 @@ extern int xmlSubstituteEntitiesDefaultValue; #include "entities.h" #include "xml-error.h" +/** + * Cleanup + */ +void xmlCleanupParser (void); + /** * Input functions */ - int xmlParserInputRead (xmlParserInputPtr in, int len); int xmlParserInputGrow (xmlParserInputPtr in, diff --git a/tester.c b/tester.c index 02cf5fb9..295a6697 100644 --- a/tester.c +++ b/tester.c @@ -280,6 +280,7 @@ int main(int argc, char **argv) { printf("\t--insert : test for valid insertions\n"); printf("\t--compress : turn on gzip compression of output\n"); } + xmlCleanupParser(); xmlMemoryDump(); return(0); diff --git a/tree.c b/tree.c index 4945ed12..605119e0 100644 --- a/tree.c +++ b/tree.c @@ -2063,10 +2063,11 @@ xmlNodeSetLang(xmlNodePtr cur, const xmlChar *lang) { * attribute or the one carried by the nearest ancestor. * * Returns a pointer to the lang value, or NULL if not found + * It's up to the caller to free the memory. */ -const xmlChar * +xmlChar * xmlNodeGetLang(xmlNodePtr cur) { - const xmlChar *lang; + xmlChar *lang; while (cur != NULL) { lang = xmlGetProp(cur, BAD_CAST "xml:lang"); @@ -2470,8 +2471,10 @@ xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, const xmlChar *href) { * Search and get the value of an attribute associated to a node * This does the entity substitution. * Returns the attribute value or NULL if not found. + * It's up to the caller to free the memory. */ -xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar *name) { +xmlChar * +xmlGetProp(xmlNodePtr node, const xmlChar *name) { xmlAttrPtr prop = node->properties; while (prop != NULL) { diff --git a/tree.h b/tree.h index f5fcf57a..b6d030bc 100644 --- a/tree.h +++ b/tree.h @@ -464,7 +464,7 @@ void xmlNodeAddContentLen (xmlNodePtr cur, const xmlChar *content, int len); xmlChar * xmlNodeGetContent (xmlNodePtr cur); -const xmlChar * xmlNodeGetLang (xmlNodePtr cur); +xmlChar * xmlNodeGetLang (xmlNodePtr cur); void xmlNodeSetLang (xmlNodePtr cur, const xmlChar *lang); diff --git a/valid.c b/valid.c index 691da4ad..7de29d02 100644 --- a/valid.c +++ b/valid.c @@ -2993,8 +2993,8 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree, const xmlChar **list, switch (ctree->type) { case XML_ELEMENT_CONTENT_PCDATA: for (i = 0; i < *len;i++) - if (!xmlStrcmp("#PCDATA", list[i])) return(*len); - list[(*len)++] = "#PCDATA"; + if (!xmlStrcmp(BAD_CAST "#PCDATA", list[i])) return(*len); + list[(*len)++] = BAD_CAST "#PCDATA"; break; case XML_ELEMENT_CONTENT_ELEMENT: for (i = 0; i < *len;i++) @@ -3088,7 +3088,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **list, /* * Creates a dummy node and insert it into the tree */ - test_node = xmlNewNode (NULL, ""); + test_node = xmlNewNode (NULL, BAD_CAST ""); test_node->doc = ref_node->doc; test_node->parent = parent; test_node->prev = prev; diff --git a/xmlIO.c b/xmlIO.c index ea14efe0..3526a0a0 100644 --- a/xmlIO.c +++ b/xmlIO.c @@ -263,7 +263,7 @@ xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc) { * in case of error. */ int -xmlParserInputBufferPush(xmlParserInputBufferPtr in, int len, char *buf) { +xmlParserInputBufferPush(xmlParserInputBufferPtr in, int len, const char *buf) { char *buffer = NULL; int nbchars = 0; diff --git a/xmlIO.h b/xmlIO.h index 58baeb01..2bdba5d8 100644 --- a/xmlIO.h +++ b/xmlIO.h @@ -52,7 +52,7 @@ int xmlParserInputBufferGrow (xmlParserInputBufferPtr in, int len); int xmlParserInputBufferPush (xmlParserInputBufferPtr in, int len, - char *buf); + const char *buf); void xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); char * xmlParserGetDirectory (const char *filename);