Cleanups, 1 bug fix:
- HTMLparser.c: fixed htmlStartCloseIndexinitialized init
- entities.h: exported xmlInitializePredefinedEntities
- parser.[ch] : added xmlInitParser()
- parserInternals.h : had to export htmlInitAutoClose()
Daniel
diff --git a/ChangeLog b/ChangeLog
index 8ce8e95..eae1eea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Oct 1 20:19:39 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * HTMLparser.c: fixed htmlStartCloseIndexinitialized init
+ * entities.h: exported xmlInitializePredefinedEntities
+ * parser.[ch] : added xmlInitParser()
+ * parserInternals.h : had to export htmlInitAutoClose()
+
Sun Oct 1 16:28:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>
* xpath.[ch] : fixed some serious XPath Predicate evaluation
diff --git a/HTMLparser.c b/HTMLparser.c
index 2bafa72..6866c4b 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -579,7 +579,8 @@
* htmlInitAutoClose:
*
* Initialize the htmlStartCloseIndex for fast lookup of closing tags names.
- *
+ * This is not reentrant. Call xmlInitParser() once before processing in
+ * case of use in multithreaded programs.
*/
void
htmlInitAutoClose(void) {
@@ -594,6 +595,7 @@
while (htmlStartClose[i] != NULL) i++;
i++;
}
+ htmlStartCloseIndexinitialized = 1;
}
/**
diff --git a/entities.h b/entities.h
index e5bcc1b..2fad326 100644
--- a/entities.h
+++ b/entities.h
@@ -86,6 +86,7 @@
* External functions :
*/
+void xmlInitializePredefinedEntities (void);
xmlEntityPtr xmlAddDocEntity (xmlDocPtr doc,
const xmlChar *name,
int type,
diff --git a/include/libxml/entities.h b/include/libxml/entities.h
index e5bcc1b..2fad326 100644
--- a/include/libxml/entities.h
+++ b/include/libxml/entities.h
@@ -86,6 +86,7 @@
* External functions :
*/
+void xmlInitializePredefinedEntities (void);
xmlEntityPtr xmlAddDocEntity (xmlDocPtr doc,
const xmlChar *name,
int type,
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index 7e0a37a..740d202 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -310,8 +310,9 @@
/**
- * Cleanup
+ * Init/Cleanup
*/
+void xmlInitParser (void);
void xmlCleanupParser (void);
/**
diff --git a/include/libxml/parserInternals.h b/include/libxml/parserInternals.h
index 8e64113..7b85b8a 100644
--- a/include/libxml/parserInternals.h
+++ b/include/libxml/parserInternals.h
@@ -287,6 +287,13 @@
int val);
void xmlNextChar (xmlParserCtxtPtr ctxt);
void xmlParserInputShrink (xmlParserInputPtr in);
+
+#ifdef LIBXML_HTML_ENABLED
+/*
+ * Actually comes from the HTML parser but launched from the init stuff
+ */
+void htmlInitAutoClose (void);
+#endif
#ifdef __cplusplus
}
#endif
diff --git a/parser.c b/parser.c
index 83e2350..3d9a2e7 100644
--- a/parser.c
+++ b/parser.c
@@ -6909,7 +6909,7 @@
xmlChar start[4];
xmlCharEncoding enc;
- xmlDefaultSAXHandlerInit();
+ xmlInitParser();
GROW;
@@ -9477,6 +9477,30 @@
* *
************************************************************************/
+static int xmlParserInitialized = 0;
+
+/**
+ * xmlInitParser:
+ *
+ * Initialization function for the XML parser.
+ * This is not reentrant. Call once before processing in case of
+ * use in multithreaded programs.
+ */
+
+void
+xmlInitParser(void) {
+ if (xmlParserInitialized) return;
+
+ xmlInitCharEncodingHandlers();
+ xmlInitializePredefinedEntities();
+ xmlDefaultSAXHandlerInit();
+#ifdef LIBXML_HTML_ENABLED
+ htmlInitAutoClose();
+ htmlDefaultSAXHandlerInit();
+#endif
+ xmlParserInitialized = 1;
+}
+
/**
* xmlCleanupParser:
*
@@ -9488,6 +9512,7 @@
void
xmlCleanupParser(void) {
+ xmlParserInitialized = 0;
xmlCleanupCharEncodingHandlers();
xmlCleanupPredefinedEntities();
}
diff --git a/parser.h b/parser.h
index 7e0a37a..740d202 100644
--- a/parser.h
+++ b/parser.h
@@ -310,8 +310,9 @@
/**
- * Cleanup
+ * Init/Cleanup
*/
+void xmlInitParser (void);
void xmlCleanupParser (void);
/**
diff --git a/parserInternals.h b/parserInternals.h
index 8e64113..7b85b8a 100644
--- a/parserInternals.h
+++ b/parserInternals.h
@@ -287,6 +287,13 @@
int val);
void xmlNextChar (xmlParserCtxtPtr ctxt);
void xmlParserInputShrink (xmlParserInputPtr in);
+
+#ifdef LIBXML_HTML_ENABLED
+/*
+ * Actually comes from the HTML parser but launched from the init stuff
+ */
+void htmlInitAutoClose (void);
+#endif
#ifdef __cplusplus
}
#endif