changing the way the .c is generated, extending the tests coverage fixing
* gentest.py testapi.c: changing the way the .c is generated,
extending the tests coverage
* include/libxml/nanoftp.h nanoftp.c elfgcchack.h doc/*: fixing some
function signatures, regenerating stuff
* SAX2.c parser.c xmlIO.c: another set of bug fixes and API hardening
Daniel
diff --git a/ChangeLog b/ChangeLog
index bd65790..3f9d85a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Thu Nov 4 18:32:22 CET 2004 Daniel Veillard <daniel@veillard.com>
+
+ * gentest.py testapi.c: changing the way the .c is generated,
+ extending the tests coverage
+ * include/libxml/nanoftp.h nanoftp.c elfgcchack.h doc/*: fixing some
+ function signatures, regenerating stuff
+ * SAX2.c parser.c xmlIO.c: another set of bug fixes and API hardening
+
Thu Nov 4 13:32:19 CET 2004 Daniel Veillard <daniel@veillard.com>
* gentest.py testapi.c: extending the tests coverage
diff --git a/SAX2.c b/SAX2.c
index f392660..289f296 100644
--- a/SAX2.c
+++ b/SAX2.c
@@ -51,11 +51,13 @@
*/
static void
xmlSAX2ErrMemory(xmlParserCtxtPtr ctxt, const char *msg) {
- if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
- ctxt->sax->error(ctxt->userData, "%s: out of memory\n", msg);
- ctxt->errNo = XML_ERR_NO_MEMORY;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
+ if (ctxt != NULL) {
+ if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+ ctxt->sax->error(ctxt->userData, "%s: out of memory\n", msg);
+ ctxt->errNo = XML_ERR_NO_MEMORY;
+ ctxt->instate = XML_PARSER_EOF;
+ ctxt->disableSAX = 1;
+ }
}
/**
@@ -77,16 +79,19 @@
if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
(ctxt->instate == XML_PARSER_EOF))
return;
- ctxt->errNo = error;
- if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
- schannel = ctxt->sax->serror;
+ if (ctxt != NULL) {
+ ctxt->errNo = error;
+ if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
+ schannel = ctxt->sax->serror;
+ }
__xmlRaiseError(schannel,
ctxt->vctxt.error, ctxt->vctxt.userData,
ctxt, NULL, XML_FROM_DTD, error,
XML_ERR_ERROR, NULL, 0, (const char *) str1,
(const char *) str2, NULL, 0, 0,
msg, (const char *) str1, (const char *) str2);
- ctxt->valid = 0;
+ if (ctxt != NULL)
+ ctxt->valid = 0;
}
/**
@@ -117,6 +122,7 @@
xmlSAX2GetSystemId(void *ctx)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
return((const xmlChar *) ctxt->input->filename);
}
@@ -132,6 +138,7 @@
xmlSAX2GetLineNumber(void *ctx)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
return(ctxt->input->line);
}
@@ -147,6 +154,7 @@
xmlSAX2GetColumnNumber(void *ctx)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
return(ctxt->input->col);
}
@@ -162,6 +170,7 @@
xmlSAX2IsStandalone(void *ctx)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if ((ctx == NULL) || (ctxt->myDoc == NULL)) return(0);
return(ctxt->myDoc->standalone == 1);
}
@@ -210,6 +219,7 @@
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlDtdPtr dtd;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2InternalSubset(%s, %s, %s)\n",
@@ -246,6 +256,7 @@
const xmlChar *ExternalID, const xmlChar *SystemID)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2ExternalSubset(%s, %s, %s)\n",
@@ -366,6 +377,7 @@
xmlChar *URI;
const char *base = NULL;
+ if (ctx == NULL) return(NULL);
if (ctxt->input != NULL)
base = ctxt->input->filename;
if (base == NULL)
@@ -400,6 +412,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlEntityPtr ret = NULL;
+ if (ctx == NULL) return(NULL);
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2GetEntity(%s)\n", name);
@@ -479,6 +492,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlEntityPtr ret;
+ if (ctx == NULL) return(NULL);
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2GetParameterEntity(%s)\n", name);
@@ -507,6 +521,7 @@
xmlEntityPtr ent;
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2EntityDecl(%s, %d, %s, %s, %s)\n",
@@ -578,6 +593,7 @@
xmlAttributePtr attr;
xmlChar *name = NULL, *prefix = NULL;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2AttributeDecl(%s, %s, %d, %d, %s, ...)\n",
@@ -641,6 +657,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlElementPtr elem = NULL;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2ElementDecl(%s, %d, ...)\n", name, type);
@@ -685,6 +702,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlNotationPtr nota = NULL;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2NotationDecl(%s, %s, %s)\n", name, publicId, systemId);
@@ -735,6 +753,7 @@
{
xmlEntityPtr ent;
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2UnparsedEntityDecl(%s, %s, %s, %s)\n",
@@ -817,6 +836,8 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlDocPtr doc;
+ if (ctx == NULL) return;
+
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2StartDocument()\n");
@@ -876,6 +897,7 @@
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2EndDocument()\n");
#endif
+ if (ctx == NULL) return;
#ifdef LIBXML_VALID_ENABLED
if (ctxt->validate && ctxt->wellFormed &&
ctxt->myDoc && ctxt->myDoc->intSubset)
@@ -1401,6 +1423,7 @@
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2StartElement(%s)\n", fullname);
#endif
+ if (ctx == NULL) return;
/*
* First check on validity:
@@ -1596,6 +1619,7 @@
xmlParserNodeInfo node_info;
xmlNodePtr cur = ctxt->node;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
if (name == NULL)
xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(NULL)\n");
@@ -1990,6 +2014,7 @@
const xmlChar *uri, *pref;
int i, j;
+ if (ctx == NULL) return;
/*
* First check on validity:
*/
@@ -2168,6 +2193,7 @@
xmlParserNodeInfo node_info;
xmlNodePtr cur = ctxt->node;
+ if (ctx == NULL) return;
/* Capture end position and add node */
if ((ctxt->record_info) && (cur != NULL)) {
node_info.end_pos = ctxt->input->cur - ctxt->input->base;
@@ -2202,6 +2228,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlNodePtr ret;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2Reference(%s)\n", name);
@@ -2231,6 +2258,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlNodePtr lastChild;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2Characters(%.30s, %d)\n", ch, len);
@@ -2361,6 +2389,7 @@
xmlNodePtr ret;
xmlNodePtr parent = ctxt->node;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.xmlSAX2ProcessingInstruction(%s, %s)\n", target, data);
@@ -2413,8 +2442,10 @@
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlNodePtr ret;
- xmlNodePtr parent = ctxt->node;
+ xmlNodePtr parent;
+ if (ctx == NULL) return;
+ parent = ctxt->node;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2Comment(%s)\n", value);
#endif
@@ -2466,6 +2497,7 @@
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
xmlNodePtr ret, lastChild;
+ if (ctx == NULL) return;
#ifdef DEBUG_SAX
xmlGenericError(xmlGenericErrorContext,
"SAX.pcdata(%.10s, %d)\n", value, len);
diff --git a/doc/APIchunk10.html b/doc/APIchunk10.html
index a107993..8981369 100644
--- a/doc/APIchunk10.html
+++ b/doc/APIchunk10.html
@@ -48,6 +48,7 @@
<a href="html/libxml-parserInternals.html#xmlParseReference">xmlParseReference</a><br />
<a href="html/libxml-parser.html#xmlSAXUserParseFile">xmlSAXUserParseFile</a><br />
<a href="html/libxml-parser.html#xmlSAXUserParseMemory">xmlSAXUserParseMemory</a><br />
+<a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
<a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
@@ -293,7 +294,6 @@
<a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
<a href="html/libxml-xmlreader.html#xmlReaderForFd">xmlReaderForFd</a><br />
<a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
-<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
<a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
</dd><dt>closes</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
<a href="html/libxml-nanohttp.html#xmlNanoHTTPSave">xmlNanoHTTPSave</a><br />
diff --git a/doc/APIchunk16.html b/doc/APIchunk16.html
index 214b8e1..bfea7cf 100644
--- a/doc/APIchunk16.html
+++ b/doc/APIchunk16.html
@@ -188,6 +188,7 @@
<a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
</dd><dt>lib</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
</dd><dt>libc</dt><dd><a href="html/libxml-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a><br />
+</dd><dt>libraries</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a><br />
</dd><dt>library</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
<a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
diff --git a/doc/APIchunk26.html b/doc/APIchunk26.html
index 1f4f8d7..7f88fd3 100644
--- a/doc/APIchunk26.html
+++ b/doc/APIchunk26.html
@@ -278,6 +278,8 @@
<a href="html/libxml-tree.html#xmlCopyNamespace">xmlCopyNamespace</a><br />
<a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+</dd><dt>xmlOutputBufferClose</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
</dd><dt>xmlOutputBufferPtr</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
</dd><dt>xmlOutputCloseCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
</dd><dt>xmlOutputMatchCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
diff --git a/doc/APIchunk3.html b/doc/APIchunk3.html
index 5849049..0ac8f21 100644
--- a/doc/APIchunk3.html
+++ b/doc/APIchunk3.html
@@ -308,6 +308,7 @@
<a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
</dd><dt>Initially</dt><dd><a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
</dd><dt>Initiate</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a><br />
+</dd><dt>Initilize</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a><br />
</dd><dt>Input</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
<a href="html/libxml-parser.html#xmlIOParseDTD">xmlIOParseDTD</a><br />
<a href="html/libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a><br />
diff --git a/doc/APIchunk4.html b/doc/APIchunk4.html
index 6558fd0..87416e9 100644
--- a/doc/APIchunk4.html
+++ b/doc/APIchunk4.html
@@ -200,7 +200,6 @@
<a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
<a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
<a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
-<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
</dd><dt>NRK</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
</dd><dt>NSDef</dt><dd><a href="html/libxml-parserInternals.html#xmlNamespaceParseNSDef">xmlNamespaceParseNSDef</a><br />
diff --git a/doc/APIchunk8.html b/doc/APIchunk8.html
index f13f591..4287db3 100644
--- a/doc/APIchunk8.html
+++ b/doc/APIchunk8.html
@@ -85,6 +85,8 @@
</dd><dt>WWW-Authenticate</dt><dd><a href="html/libxml-nanohttp.html#xmlNanoHTTPAuthHeader">xmlNanoHTTPAuthHeader</a><br />
</dd><dt>Walk</dt><dd><a href="html/libxml-list.html#xmlListReverseWalk">xmlListReverseWalk</a><br />
<a href="html/libxml-list.html#xmlListWalk">xmlListWalk</a><br />
+</dd><dt>Warning</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
</dd><dt>Was</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
</dd><dt>Well</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
<a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
@@ -397,6 +399,8 @@
<a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
<a href="html/libxml-nanoftp.html#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a><br />
<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+<a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
<a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
<a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
diff --git a/doc/APIchunk9.html b/doc/APIchunk9.html
index 1a0c75b..2ba5141 100644
--- a/doc/APIchunk9.html
+++ b/doc/APIchunk9.html
@@ -187,6 +187,8 @@
</dd><dt>breaks</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
</dd><dt>broken</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
<a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
+</dd><dt>buf</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
+<a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
</dd><dt>buffered</dt><dd><a href="html/libxml-xmlIO.html#xmlAllocOutputBuffer">xmlAllocOutputBuffer</a><br />
<a href="html/libxml-xmlIO.html#xmlAllocParserInputBuffer">xmlAllocParserInputBuffer</a><br />
<a href="html/libxml-xmlIO.html#xmlFreeParserInputBuffer">xmlFreeParserInputBuffer</a><br />
diff --git a/doc/APIfiles.html b/doc/APIfiles.html
index e6ac90c..ee07bd4 100644
--- a/doc/APIfiles.html
+++ b/doc/APIfiles.html
@@ -910,6 +910,7 @@
<a href="html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
@@ -1858,6 +1859,7 @@
<a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_TREE">XML_FROM_TREE</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_VALID">XML_FROM_VALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_WRITER">XML_FROM_WRITER</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_XPATH">XML_FROM_XPATH</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_XPOINTER">XML_FROM_XPOINTER</a><br />
diff --git a/doc/APIsymbols.html b/doc/APIsymbols.html
index aff50ba..bed8441 100644
--- a/doc/APIsymbols.html
+++ b/doc/APIsymbols.html
@@ -415,6 +415,7 @@
<a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_TREE">XML_FROM_TREE</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_VALID">XML_FROM_VALID</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_WRITER">XML_FROM_WRITER</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_XPATH">XML_FROM_XPATH</a><br />
<a href="html/libxml-xmlerror.html#XML_FROM_XPOINTER">XML_FROM_XPOINTER</a><br />
@@ -2367,6 +2368,7 @@
<a href="html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a><br />
+<a href="html/libxml-relaxng.html#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a><br />
<a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
diff --git a/doc/html/libxml-list.html b/doc/html/libxml-list.html
index 627047d..004a7a7 100644
--- a/doc/html/libxml-list.html
+++ b/doc/html/libxml-list.html
@@ -78,7 +78,7 @@
</pre><p>Duplicate the list</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>old</tt></i>:</span></td><td>the list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new copy of the list or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListEmpty" id="xmlListEmpty"></a>Function: xmlListEmpty</h3><pre class="programlisting">int xmlListEmpty (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
</pre><p>Is the list empty ?</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the list is empty, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlListEnd" id="xmlListEnd"></a>Function: xmlListEnd</h3><pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> xmlListEnd (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the list is empty, 0 if not empty and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlListEnd" id="xmlListEnd"></a>Function: xmlListEnd</h3><pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> xmlListEnd (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
</pre><p>Get the last element in the list</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last element in the list, or NULL</td></tr></tbody></table></div><h3><a name="xmlListFront" id="xmlListFront"></a>Function: xmlListFront</h3><pre class="programlisting"><a href="libxml-list.html#xmlLinkPtr">xmlLinkPtr</a> xmlListFront (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
</pre><p>Get the first element in the list</p>
@@ -110,7 +110,7 @@
</pre><p>Search the list for an existing value of @data</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>a search value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value associated to @data or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlListSize" id="xmlListSize"></a>Function: xmlListSize</h3><pre class="programlisting">int xmlListSize (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
</pre><p>Get the number of elements in the list</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the list</td></tr></tbody></table></div><h3><a name="xmlListSort" id="xmlListSort"></a>Function: xmlListSort</h3><pre class="programlisting">void xmlListSort (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the list or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlListSort" id="xmlListSort"></a>Function: xmlListSort</h3><pre class="programlisting">void xmlListSort (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l)<br />
</pre><p>Sort all the elements in the list</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>l</tt></i>:</span></td><td>a list</td></tr></tbody></table></div><h3><a name="xmlListWalk" id="xmlListWalk"></a>Function: xmlListWalk</h3><pre class="programlisting">void xmlListWalk (<a href="libxml-list.html#xmlListPtr">xmlListPtr</a> l, <br /> <a href="libxml-list.html#xmlListWalker">xmlListWalker</a> walker, <br /> const void * user)<br />
</pre><p>Walk all the element of the first from first to last and apply the walker function to it</p>
diff --git a/doc/html/libxml-nanoftp.html b/doc/html/libxml-nanoftp.html
index 9fc521b..7c71162 100644
--- a/doc/html/libxml-nanoftp.html
+++ b/doc/html/libxml-nanoftp.html
@@ -22,15 +22,15 @@
<pre class="programlisting">int <a href="#xmlNanoFTPCloseConnection">xmlNanoFTPCloseConnection</a> (void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlNanoFTPConnect">xmlNanoFTPConnect</a> (void * ctx)</pre>
<pre class="programlisting">void * <a href="#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a> (const char * server, <br /> int port)</pre>
-<pre class="programlisting">int <a href="#xmlNanoFTPCwd">xmlNanoFTPCwd</a> (void * ctx, <br /> char * directory)</pre>
-<pre class="programlisting">int <a href="#xmlNanoFTPDele">xmlNanoFTPDele</a> (void * ctx, <br /> char * file)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPCwd">xmlNanoFTPCwd</a> (void * ctx, <br /> const char * directory)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPDele">xmlNanoFTPDele</a> (void * ctx, <br /> const char * file)</pre>
<pre class="programlisting">void <a href="#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a> (void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlNanoFTPGet">xmlNanoFTPGet</a> (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpDataCallback">ftpDataCallback</a> callback, <br /> void * userData, <br /> const char * filename)</pre>
<pre class="programlisting">int <a href="#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a> (void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlNanoFTPGetResponse">xmlNanoFTPGetResponse</a> (void * ctx)</pre>
<pre class="programlisting">int <a href="#xmlNanoFTPGetSocket">xmlNanoFTPGetSocket</a> (void * ctx, <br /> const char * filename)</pre>
<pre class="programlisting">void <a href="#xmlNanoFTPInit">xmlNanoFTPInit</a> (void)</pre>
-<pre class="programlisting">int <a href="#xmlNanoFTPList">xmlNanoFTPList</a> (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpListCallback">ftpListCallback</a> callback, <br /> void * userData, <br /> char * filename)</pre>
+<pre class="programlisting">int <a href="#xmlNanoFTPList">xmlNanoFTPList</a> (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpListCallback">ftpListCallback</a> callback, <br /> void * userData, <br /> const char * filename)</pre>
<pre class="programlisting">void * <a href="#xmlNanoFTPNewCtxt">xmlNanoFTPNewCtxt</a> (const char * URL)</pre>
<pre class="programlisting">void * <a href="#xmlNanoFTPOpen">xmlNanoFTPOpen</a> (const char * URL)</pre>
<pre class="programlisting">void <a href="#xmlNanoFTPProxy">xmlNanoFTPProxy</a> (const char * host, <br /> int port, <br /> const char * user, <br /> const char * passwd, <br /> int type)</pre>
@@ -57,9 +57,9 @@
</pre><p>Tries to open a control connection</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPConnectTo" id="xmlNanoFTPConnectTo"></a>Function: xmlNanoFTPConnectTo</h3><pre class="programlisting">void * xmlNanoFTPConnectTo (const char * server, <br /> int port)<br />
</pre><p>Tries to open a control connection to the given server/port</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>server</tt></i>:</span></td><td>an FTP server name</td></tr><tr><td><span class="term"><i><tt>port</tt></i>:</span></td><td>the port (use 21 if 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an fTP context or NULL if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPCwd" id="xmlNanoFTPCwd"></a>Function: xmlNanoFTPCwd</h3><pre class="programlisting">int xmlNanoFTPCwd (void * ctx, <br /> char * directory)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>server</tt></i>:</span></td><td>an FTP server name</td></tr><tr><td><span class="term"><i><tt>port</tt></i>:</span></td><td>the port (use 21 if 0)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an fTP context or NULL if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPCwd" id="xmlNanoFTPCwd"></a>Function: xmlNanoFTPCwd</h3><pre class="programlisting">int xmlNanoFTPCwd (void * ctx, <br /> const char * directory)<br />
</pre><p>Tries to change the remote directory</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>directory</tt></i>:</span></td><td>a directory on the server</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 1 if CWD worked, 0 if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPDele" id="xmlNanoFTPDele"></a>Function: xmlNanoFTPDele</h3><pre class="programlisting">int xmlNanoFTPDele (void * ctx, <br /> char * file)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>directory</tt></i>:</span></td><td>a directory on the server</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 1 if CWD worked, 0 if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPDele" id="xmlNanoFTPDele"></a>Function: xmlNanoFTPDele</h3><pre class="programlisting">int xmlNanoFTPDele (void * ctx, <br /> const char * file)<br />
</pre><p>Tries to delete an item (file or directory) from server</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>a file or directory on the server</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 1 if DELE worked, 0 if it failed</td></tr></tbody></table></div><h3><a name="xmlNanoFTPFreeCtxt" id="xmlNanoFTPFreeCtxt"></a>Function: xmlNanoFTPFreeCtxt</h3><pre class="programlisting">void xmlNanoFTPFreeCtxt (void * ctx)<br />
</pre><p>Frees the context after closing the connection.</p>
@@ -73,7 +73,7 @@
</pre><p>Initiate fetch of the given file from the server.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file to retrieve (or NULL if path is in context).</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the socket for the data connection, or <0 in case of error</td></tr></tbody></table></div><h3><a name="xmlNanoFTPInit" id="xmlNanoFTPInit"></a>Function: xmlNanoFTPInit</h3><pre class="programlisting">void xmlNanoFTPInit (void)<br />
</pre><p>Initialize the FTP protocol layer. Currently it just checks for proxy informations, and get the hostname</p>
-<h3><a name="xmlNanoFTPList" id="xmlNanoFTPList"></a>Function: xmlNanoFTPList</h3><pre class="programlisting">int xmlNanoFTPList (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpListCallback">ftpListCallback</a> callback, <br /> void * userData, <br /> char * filename)<br />
+<h3><a name="xmlNanoFTPList" id="xmlNanoFTPList"></a>Function: xmlNanoFTPList</h3><pre class="programlisting">int xmlNanoFTPList (void * ctx, <br /> <a href="libxml-nanoftp.html#ftpListCallback">ftpListCallback</a> callback, <br /> void * userData, <br /> const char * filename)<br />
</pre><p>Do a listing on the server. All files info are passed back in the callbacks.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>an FTP context</td></tr><tr><td><span class="term"><i><tt>callback</tt></i>:</span></td><td>the user callback</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>the user callback data</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>optional files to list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 incase of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlNanoFTPNewCtxt" id="xmlNanoFTPNewCtxt"></a>Function: xmlNanoFTPNewCtxt</h3><pre class="programlisting">void * xmlNanoFTPNewCtxt (const char * URL)<br />
</pre><p>Allocate and initialize a new FTP context.</p>
diff --git a/doc/html/libxml-relaxng.html b/doc/html/libxml-relaxng.html
index 6e20a12..d611ce1 100644
--- a/doc/html/libxml-relaxng.html
+++ b/doc/html/libxml-relaxng.html
@@ -29,6 +29,7 @@
<pre class="programlisting">void <a href="#xmlRelaxNGFreeValidCtxt">xmlRelaxNGFreeValidCtxt</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt)</pre>
<pre class="programlisting">int <a href="#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a> (<a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> ctxt, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> * err, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> * warn, <br /> void ** ctx)</pre>
<pre class="programlisting">int <a href="#xmlRelaxNGGetValidErrors">xmlRelaxNGGetValidErrors</a> (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> * err, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> * warn, <br /> void ** ctx)</pre>
+<pre class="programlisting">int <a href="#xmlRelaxNGInitTypes">xmlRelaxNGInitTypes</a> (void)</pre>
<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> <a href="#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a> (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> <a href="#xmlRelaxNGNewMemParserCtxt">xmlRelaxNGNewMemParserCtxt</a> (const char * buffer, <br /> int size)</pre>
<pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> <a href="#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a> (const char * URL)</pre>
@@ -118,7 +119,9 @@
</pre><p>Get the callback information used to handle errors for a validation context</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>the error callback result</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning callback result</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>contextual data for the callbacks result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of failure, 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGGetValidErrors" id="xmlRelaxNGGetValidErrors"></a>Function: xmlRelaxNGGetValidErrors</h3><pre class="programlisting">int xmlRelaxNGGetValidErrors (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityErrorFunc">xmlRelaxNGValidityErrorFunc</a> * err, <br /> <a href="libxml-relaxng.html#xmlRelaxNGValidityWarningFunc">xmlRelaxNGValidityWarningFunc</a> * warn, <br /> void ** ctx)<br />
</pre><p>Get the error and warning callback informations</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>the error function result</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning function result</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error and 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGNewDocParserCtxt" id="xmlRelaxNGNewDocParserCtxt"></a>Function: xmlRelaxNGNewDocParserCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> xmlRelaxNGNewDocParserCtxt (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a Relax-NG validation context</td></tr><tr><td><span class="term"><i><tt>err</tt></i>:</span></td><td>the error function result</td></tr><tr><td><span class="term"><i><tt>warn</tt></i>:</span></td><td>the warning function result</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the functions context result</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error and 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGInitTypes" id="xmlRelaxNGInitTypes"></a>Function: xmlRelaxNGInitTypes</h3><pre class="programlisting">int xmlRelaxNGInitTypes (void)<br />
+</pre><p>Initilize the default type libraries.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGNewDocParserCtxt" id="xmlRelaxNGNewDocParserCtxt"></a>Function: xmlRelaxNGNewDocParserCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> xmlRelaxNGNewDocParserCtxt (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
</pre><p>Create an XML RelaxNGs parser context for that document. Note: since the process of compiling a RelaxNG schemas modifies the document, the @doc parameter is duplicated internally.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a preparsed document tree</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the parser context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlRelaxNGNewMemParserCtxt" id="xmlRelaxNGNewMemParserCtxt"></a>Function: xmlRelaxNGNewMemParserCtxt</h3><pre class="programlisting"><a href="libxml-relaxng.html#xmlRelaxNGParserCtxtPtr">xmlRelaxNGParserCtxtPtr</a> xmlRelaxNGNewMemParserCtxt (const char * buffer, <br /> int size)<br />
</pre><p>Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs file.</p>
diff --git a/doc/html/libxml-tree.html b/doc/html/libxml-tree.html
index 99c4bd9..f5d4241 100644
--- a/doc/html/libxml-tree.html
+++ b/doc/html/libxml-tree.html
@@ -833,13 +833,13 @@
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFileEnc" id="xmlSaveFileEnc"></a>Function: xmlSaveFileEnc</h3><pre class="programlisting">int xmlSaveFileEnc (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)<br />
</pre><p>Dump an XML document, converting it to the given encoding</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the name of an encoding (or NULL)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFileTo" id="xmlSaveFileTo"></a>Function: xmlSaveFileTo</h3><pre class="programlisting">int xmlSaveFileTo (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding)<br />
-</pre><p>Dump an XML document to an I/O buffer.</p>
+</pre><p>Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an output I/O buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding if any assuming the I/O layer handles the trancoding</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFormatFile" id="xmlSaveFormatFile"></a>Function: xmlSaveFormatFile</h3><pre class="programlisting">int xmlSaveFormatFile (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> int format)<br />
</pre><p>Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used. If @format is set then the document will be indented on output. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename (or URL)</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSaveFormatFileEnc" id="xmlSaveFormatFileEnc"></a>Function: xmlSaveFormatFileEnc</h3><pre class="programlisting">int xmlSaveFormatFileEnc (const char * filename, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
</pre><p>Dump an XML document to a file or an URL.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the filename or URL to output</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document being saved</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the name of the encoding to use or NULL.</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces be added.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of error. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td></tr></tbody></table></div><h3><a name="xmlSaveFormatFileTo" id="xmlSaveFormatFileTo"></a>Function: xmlSaveFormatFileTo</h3><pre class="programlisting">int xmlSaveFormatFileTo (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br /> <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br /> const char * encoding, <br /> int format)<br />
-</pre><p>Dump an XML document to an I/O buffer. NOTE: the I/O buffer is closed as part of the call.</p>
+</pre><p>Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an output I/O buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>the encoding if any assuming the I/O layer handles the trancoding</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure.</td></tr></tbody></table></div><h3><a name="xmlSearchNs" id="xmlSearchNs"></a>Function: xmlSearchNs</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlSearchNs (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
</pre><p>Search a Ns registered under a given name space for a document. recurse on the parents until it finds the defined namespace or return NULL otherwise. @nameSpace can be NULL, this is a search for the default namespace. We don't allow to cross entities boundaries. If you don't declare the namespace within those you will be in troubles !!! A warning is generated to cover this case.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the namespace prefix</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the namespace pointer or NULL.</td></tr></tbody></table></div><h3><a name="xmlSearchNsByHref" id="xmlSearchNsByHref"></a>Function: xmlSearchNsByHref</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> xmlSearchNsByHref (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br /> <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br /> const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href)<br />
diff --git a/doc/html/libxml-xmlerror.html b/doc/html/libxml-xmlerror.html
index 93aaa79..a0bfb49 100644
--- a/doc/html/libxml-xmlerror.html
+++ b/doc/html/libxml-xmlerror.html
@@ -77,6 +77,7 @@
<a name="XML_FROM_XSLT" id="XML_FROM_XSLT">XML_FROM_XSLT</a> = 22 : The XSLT engine from libxslt
<a name="XML_FROM_VALID" id="XML_FROM_VALID">XML_FROM_VALID</a> = 23 : The XML DTD validation with valid context
<a name="XML_FROM_CHECK" id="XML_FROM_CHECK">XML_FROM_CHECK</a> = 24 : The error checking module
+ <a name="XML_FROM_WRITER" id="XML_FROM_WRITER">XML_FROM_WRITER</a> = 25 : The xmlwriter module
}
</pre><h3>Enum <a name="xmlErrorLevel" id="xmlErrorLevel">xmlErrorLevel</a></h3><pre class="programlisting">Enum xmlErrorLevel {
<a name="XML_ERR_NONE" id="XML_ERR_NONE">XML_ERR_NONE</a> = 0
diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml
index e65e13d..daae1d2 100644
--- a/doc/libxml2-api.xml
+++ b/doc/libxml2-api.xml
@@ -1023,6 +1023,7 @@
<exports symbol='xmlRelaxNGGetValidErrors' type='function'/>
<exports symbol='xmlRelaxNGNewMemParserCtxt' type='function'/>
<exports symbol='xmlRelaxNGDump' type='function'/>
+ <exports symbol='xmlRelaxNGInitTypes' type='function'/>
<exports symbol='xmlRelaxNGValidityErrorFunc' type='function'/>
<exports symbol='xmlRelaxNGParse' type='function'/>
<exports symbol='xmlRelaxNGDumpTree' type='function'/>
@@ -1994,6 +1995,7 @@
<exports symbol='XML_SCHEMAP_INVALID_ATTR_COMBINATION' type='enum'/>
<exports symbol='XML_RNGP_PARAM_FORBIDDEN' type='enum'/>
<exports symbol='XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD' type='enum'/>
+ <exports symbol='XML_FROM_WRITER' type='enum'/>
<exports symbol='XML_ERR_UNSUPPORTED_ENCODING' type='enum'/>
<exports symbol='XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME' type='enum'/>
<exports symbol='XML_ERR_ENTITYREF_IN_PROLOG' type='enum'/>
@@ -4474,7 +4476,7 @@
<enum name='XML_EXTERNAL_PARAMETER_ENTITY' file='entities' value='5' type='xmlEntityType'/>
<enum name='XML_FROM_C14N' file='xmlerror' value='21' type='xmlErrorDomain' info='The Canonicalization module'/>
<enum name='XML_FROM_CATALOG' file='xmlerror' value='20' type='xmlErrorDomain' info='The Catalog module'/>
- <enum name='XML_FROM_CHECK' file='xmlerror' value='24' type='xmlErrorDomain' info=' The error checking module'/>
+ <enum name='XML_FROM_CHECK' file='xmlerror' value='24' type='xmlErrorDomain' info='The error checking module'/>
<enum name='XML_FROM_DATATYPE' file='xmlerror' value='15' type='xmlErrorDomain' info='The W3C XML Schemas Datatype module'/>
<enum name='XML_FROM_DTD' file='xmlerror' value='4' type='xmlErrorDomain' info='The XML DTD validation with parser contex'/>
<enum name='XML_FROM_FTP' file='xmlerror' value='9' type='xmlErrorDomain' info='The FTP module'/>
@@ -4493,6 +4495,7 @@
<enum name='XML_FROM_SCHEMASV' file='xmlerror' value='17' type='xmlErrorDomain' info='The W3C XML Schemas validation module'/>
<enum name='XML_FROM_TREE' file='xmlerror' value='2' type='xmlErrorDomain' info='The tree module'/>
<enum name='XML_FROM_VALID' file='xmlerror' value='23' type='xmlErrorDomain' info='The XML DTD validation with valid context'/>
+ <enum name='XML_FROM_WRITER' file='xmlerror' value='25' type='xmlErrorDomain' info=' The xmlwriter module'/>
<enum name='XML_FROM_XINCLUDE' file='xmlerror' value='11' type='xmlErrorDomain' info='The XInclude processing'/>
<enum name='XML_FROM_XPATH' file='xmlerror' value='12' type='xmlErrorDomain' info='The XPath module'/>
<enum name='XML_FROM_XPOINTER' file='xmlerror' value='13' type='xmlErrorDomain' info='The XPointer module'/>
@@ -9744,7 +9747,7 @@
</function>
<function name='xmlListEmpty' file='list'>
<info>Is the list empty ?</info>
- <return type='int' info='1 if the list is empty, 0 otherwise'/>
+ <return type='int' info='1 if the list is empty, 0 if not empty and -1 in case of error'/>
<arg name='l' type='xmlListPtr' info='a list'/>
</function>
<function name='xmlListEnd' file='list'>
@@ -9835,7 +9838,7 @@
</function>
<function name='xmlListSize' file='list'>
<info>Get the number of elements in the list</info>
- <return type='int' info='the number of elements in the list'/>
+ <return type='int' info='the number of elements in the list or -1 in case of error'/>
<arg name='l' type='xmlListPtr' info='a list'/>
</function>
<function name='xmlListSort' file='list'>
@@ -10057,14 +10060,14 @@
<info>Tries to change the remote directory</info>
<return type='int' info='-1 incase of error, 1 if CWD worked, 0 if it failed'/>
<arg name='ctx' type='void *' info='an FTP context'/>
- <arg name='directory' type='char *' info='a directory on the server'/>
+ <arg name='directory' type='const char *' info='a directory on the server'/>
</function>
<function name='xmlNanoFTPDele' file='nanoftp'>
<cond>LIBXML_FTP_ENABLED</cond>
<info>Tries to delete an item (file or directory) from server</info>
<return type='int' info='-1 incase of error, 1 if DELE worked, 0 if it failed'/>
<arg name='ctx' type='void *' info='an FTP context'/>
- <arg name='file' type='char *' info='a file or directory on the server'/>
+ <arg name='file' type='const char *' info='a file or directory on the server'/>
</function>
<function name='xmlNanoFTPFreeCtxt' file='nanoftp'>
<cond>LIBXML_FTP_ENABLED</cond>
@@ -10112,7 +10115,7 @@
<arg name='ctx' type='void *' info='an FTP context'/>
<arg name='callback' type='ftpListCallback' info='the user callback'/>
<arg name='userData' type='void *' info='the user callback data'/>
- <arg name='filename' type='char *' info='optional files to list'/>
+ <arg name='filename' type='const char *' info='optional files to list'/>
</function>
<function name='xmlNanoFTPNewCtxt' file='nanoftp'>
<cond>LIBXML_FTP_ENABLED</cond>
@@ -11780,6 +11783,11 @@
<arg name='warn' type='xmlRelaxNGValidityWarningFunc *' info='the warning function result'/>
<arg name='ctx' type='void **' info='the functions context result'/>
</function>
+ <function name='xmlRelaxNGInitTypes' file='relaxng'>
+ <cond>LIBXML_SCHEMAS_ENABLED</cond>
+ <info>Initilize the default type libraries.</info>
+ <return type='int' info='0 in case of success and -1 in case of error.'/>
+ </function>
<function name='xmlRelaxNGNewDocParserCtxt' file='relaxng'>
<cond>LIBXML_SCHEMAS_ENABLED</cond>
<info>Create an XML RelaxNGs parser context for that document. Note: since the process of compiling a RelaxNG schemas modifies the document, the @doc parameter is duplicated internally.</info>
@@ -12257,7 +12265,7 @@
</function>
<function name='xmlSaveFileTo' file='tree'>
<cond>LIBXML_OUTPUT_ENABLED</cond>
- <info>Dump an XML document to an I/O buffer.</info>
+ <info>Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.</info>
<return type='int' info='the number of bytes written or -1 in case of failure.'/>
<arg name='buf' type='xmlOutputBufferPtr' info='an output I/O buffer'/>
<arg name='cur' type='xmlDocPtr' info='the document'/>
@@ -12288,7 +12296,7 @@
</function>
<function name='xmlSaveFormatFileTo' file='tree'>
<cond>LIBXML_OUTPUT_ENABLED</cond>
- <info>Dump an XML document to an I/O buffer. NOTE: the I/O buffer is closed as part of the call.</info>
+ <info>Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.</info>
<return type='int' info='the number of bytes written or -1 in case of failure.'/>
<arg name='buf' type='xmlOutputBufferPtr' info='an output I/O buffer'/>
<arg name='cur' type='xmlDocPtr' info='the document'/>
diff --git a/doc/libxml2-refs.xml b/doc/libxml2-refs.xml
index dfa100b..4d0ecfb 100644
--- a/doc/libxml2-refs.xml
+++ b/doc/libxml2-refs.xml
@@ -409,6 +409,7 @@
<reference name='XML_FROM_SCHEMASV' href='html/libxml-xmlerror.html#XML_FROM_SCHEMASV'/>
<reference name='XML_FROM_TREE' href='html/libxml-xmlerror.html#XML_FROM_TREE'/>
<reference name='XML_FROM_VALID' href='html/libxml-xmlerror.html#XML_FROM_VALID'/>
+ <reference name='XML_FROM_WRITER' href='html/libxml-xmlerror.html#XML_FROM_WRITER'/>
<reference name='XML_FROM_XINCLUDE' href='html/libxml-xmlerror.html#XML_FROM_XINCLUDE'/>
<reference name='XML_FROM_XPATH' href='html/libxml-xmlerror.html#XML_FROM_XPATH'/>
<reference name='XML_FROM_XPOINTER' href='html/libxml-xmlerror.html#XML_FROM_XPOINTER'/>
@@ -2361,6 +2362,7 @@
<reference name='xmlRelaxNGFreeValidCtxt' href='html/libxml-relaxng.html#xmlRelaxNGFreeValidCtxt'/>
<reference name='xmlRelaxNGGetParserErrors' href='html/libxml-relaxng.html#xmlRelaxNGGetParserErrors'/>
<reference name='xmlRelaxNGGetValidErrors' href='html/libxml-relaxng.html#xmlRelaxNGGetValidErrors'/>
+ <reference name='xmlRelaxNGInitTypes' href='html/libxml-relaxng.html#xmlRelaxNGInitTypes'/>
<reference name='xmlRelaxNGNewDocParserCtxt' href='html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt'/>
<reference name='xmlRelaxNGNewMemParserCtxt' href='html/libxml-relaxng.html#xmlRelaxNGNewMemParserCtxt'/>
<reference name='xmlRelaxNGNewParserCtxt' href='html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt'/>
@@ -3662,6 +3664,7 @@
<ref name='XML_FROM_SCHEMASV'/>
<ref name='XML_FROM_TREE'/>
<ref name='XML_FROM_VALID'/>
+ <ref name='XML_FROM_WRITER'/>
<ref name='XML_FROM_XINCLUDE'/>
<ref name='XML_FROM_XPATH'/>
<ref name='XML_FROM_XPOINTER'/>
@@ -5650,6 +5653,7 @@
<ref name='xmlRelaxNGFreeValidCtxt'/>
<ref name='xmlRelaxNGGetParserErrors'/>
<ref name='xmlRelaxNGGetValidErrors'/>
+ <ref name='xmlRelaxNGInitTypes'/>
<ref name='xmlRelaxNGNewDocParserCtxt'/>
<ref name='xmlRelaxNGNewMemParserCtxt'/>
<ref name='xmlRelaxNGNewParserCtxt'/>
@@ -10658,6 +10662,7 @@
<ref name='xmlRelaxNGFreeValidCtxt'/>
<ref name='xmlRelaxNGGetParserErrors'/>
<ref name='xmlRelaxNGGetValidErrors'/>
+ <ref name='xmlRelaxNGInitTypes'/>
<ref name='xmlRelaxNGNewDocParserCtxt'/>
<ref name='xmlRelaxNGNewMemParserCtxt'/>
<ref name='xmlRelaxNGNewParserCtxt'/>
@@ -11626,6 +11631,7 @@
<ref name='XML_FROM_SCHEMASV'/>
<ref name='XML_FROM_TREE'/>
<ref name='XML_FROM_VALID'/>
+ <ref name='XML_FROM_WRITER'/>
<ref name='XML_FROM_XINCLUDE'/>
<ref name='XML_FROM_XPATH'/>
<ref name='XML_FROM_XPOINTER'/>
@@ -14912,6 +14918,9 @@
<word name='Initiate'>
<ref name='xmlNanoFTPGetSocket'/>
</word>
+ <word name='Initilize'>
+ <ref name='xmlRelaxNGInitTypes'/>
+ </word>
<word name='Input'>
<ref name='_xmlParserCtxt'/>
<ref name='xmlIOParseDTD'/>
@@ -15278,7 +15287,6 @@
<ref name='xmlParseExternalID'/>
<ref name='xmlParsePEReference'/>
<ref name='xmlParserHandlePEReference'/>
- <ref name='xmlSaveFormatFileTo'/>
<ref name='xmlTextReaderCurrentDoc'/>
</word>
<word name='NRK'>
@@ -16917,6 +16925,10 @@
<ref name='xmlListReverseWalk'/>
<ref name='xmlListWalk'/>
</word>
+ <word name='Warning'>
+ <ref name='xmlSaveFileTo'/>
+ <ref name='xmlSaveFormatFileTo'/>
+ </word>
<word name='Was'>
<ref name='_xmlParserInput'/>
</word>
@@ -17432,6 +17444,8 @@
<ref name='xmlNanoFTPFreeCtxt'/>
<ref name='xmlNanoFTPGetResponse'/>
<ref name='xmlReconciliateNs'/>
+ <ref name='xmlSaveFileTo'/>
+ <ref name='xmlSaveFormatFileTo'/>
<ref name='xmlValidGetValidElements'/>
<ref name='xmlXPathNextFollowing'/>
<ref name='xmlXPathStringFunction'/>
@@ -18127,6 +18141,10 @@
<ref name='xmlParseBalancedChunkMemoryRecover'/>
<ref name='xmlTextReaderNormalization'/>
</word>
+ <word name='buf'>
+ <ref name='xmlSaveFileTo'/>
+ <ref name='xmlSaveFormatFileTo'/>
+ </word>
<word name='buffered'>
<ref name='xmlAllocOutputBuffer'/>
<ref name='xmlAllocParserInputBuffer'/>
@@ -18227,6 +18245,7 @@
<ref name='xmlParseReference'/>
<ref name='xmlSAXUserParseFile'/>
<ref name='xmlSAXUserParseMemory'/>
+ <ref name='xmlSaveFileTo'/>
<ref name='xmlSaveFormatFileTo'/>
<ref name='xmlSetEntityReferenceFunc'/>
<ref name='xmlTextReaderCurrentDoc'/>
@@ -18580,7 +18599,6 @@
<ref name='xmlReadFd'/>
<ref name='xmlReaderForFd'/>
<ref name='xmlReaderNewFd'/>
- <ref name='xmlSaveFormatFileTo'/>
<ref name='xmlTextWriterEndDocument'/>
</word>
<word name='closes'>
@@ -22499,6 +22517,9 @@
<word name='libc'>
<ref name='DEBUG_MEMORY'/>
</word>
+ <word name='libraries'>
+ <ref name='xmlRelaxNGInitTypes'/>
+ </word>
<word name='library'>
<ref name='_xmlError'/>
<ref name='_xmlSchema'/>
@@ -28343,6 +28364,10 @@
<ref name='xmlCopyNamespaceList'/>
<ref name='xmlGetNsList'/>
</word>
+ <word name='xmlOutputBufferClose'>
+ <ref name='xmlSaveFileTo'/>
+ <ref name='xmlSaveFormatFileTo'/>
+ </word>
<word name='xmlOutputBufferPtr'>
<ref name='xmlNewTextWriter'/>
</word>
diff --git a/elfgcchack.h b/elfgcchack.h
index 3f02445..c72afad 100644
--- a/elfgcchack.h
+++ b/elfgcchack.h
@@ -3483,6 +3483,12 @@
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
+extern __typeof (xmlRelaxNGInitTypes) xmlRelaxNGInitTypes__internal_alias __attribute((visibility("hidden")));
+extern __typeof (xmlRelaxNGInitTypes) xmlRelaxNGInitTypes __attribute((alias("xmlRelaxNGInitTypes__internal_alias")));
+#define xmlRelaxNGInitTypes xmlRelaxNGInitTypes__internal_alias
+#endif
+
+#ifdef LIBXML_SCHEMAS_ENABLED
extern __typeof (xmlRelaxNGNewDocParserCtxt) xmlRelaxNGNewDocParserCtxt__internal_alias __attribute((visibility("hidden")));
extern __typeof (xmlRelaxNGNewDocParserCtxt) xmlRelaxNGNewDocParserCtxt __attribute((alias("xmlRelaxNGNewDocParserCtxt__internal_alias")));
#define xmlRelaxNGNewDocParserCtxt xmlRelaxNGNewDocParserCtxt__internal_alias
diff --git a/gentest.py b/gentest.py
index 9244a90..a0f435b 100755
--- a/gentest.py
+++ b/gentest.py
@@ -3,6 +3,7 @@
# generate a tester program for the API
#
import sys
+import os
import string
try:
import libxml2
@@ -64,6 +65,12 @@
#
# Extra code needed for some test cases
#
+extra_pre_call = {
+ "xmlSAXUserParseFile":
+ "if (sax == &xmlDefaultSAXHandler) user_data = NULL;",
+ "xmlSAXUserParseMemory":
+ "if (sax == &xmlDefaultSAXHandler) user_data = NULL;",
+}
extra_post_call = {
"xmlAddChild":
"if (ret_val == NULL) { xmlFreeNode(cur) ; cur = NULL ; }",
@@ -94,7 +101,8 @@
"xmlXPathConvertNumber": """val = NULL;""",
"xmlXPathConvertString": """val = NULL;""",
"xmlSaveFileTo": """buf = NULL;""",
- "xmlSaveFormatFileTo": """buf = NULL;"""
+ "xmlSaveFormatFileTo": """buf = NULL;""",
+ "xmlIOParseDTD": "input = NULL;",
}
modules = []
@@ -128,109 +136,13 @@
except:
missing_types[name] = [func]
-#
-# Open the input API description and the C test program result
-#
-doc = libxml2.readFile('doc/libxml2-api.xml', None, 0)
-if doc == None:
- print "Failed to load doc/libxml2-api.xml"
- sys.exit(1)
-test = open('testapi.c', 'w')
-ctxt = doc.xpathNewContext()
-headers = ctxt.xpathEval("/api/files/file")
-
-#
-# Generate the test header
-#
-test.write("""/*
- * testapi.c: libxml2 API tester program.
- *
- * Automatically generated by gentest.py from libxml2-api.xml
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include <stdio.h>
-#include <libxml/xmlerror.h>
-#include <libxml/relaxng.h>
-
-static int testlibxml2(void);
-
-static int generic_errors = 0;
-static int call_tests = 0;
-static int function_tests = 0;
-
-static xmlChar chartab[1024] = " chartab\\n";
-static int inttab[1024];
-static unsigned long longtab[1024];
-
-static void
-structured_errors(void *userData ATTRIBUTE_UNUSED,
- xmlErrorPtr error ATTRIBUTE_UNUSED) {
- generic_errors++;
-}
-
-int main(void) {
- int ret;
- int blocks, mem;
-
- xmlInitParser();
-#ifdef LIBXML_SCHEMAS_ENABLED
- xmlRelaxNGInitTypes();
-#endif
-
- LIBXML_TEST_VERSION
-
- xmlSetStructuredErrorFunc(NULL, structured_errors);
-
- ret = testlibxml2();
-
- xmlCleanupParser();
- blocks = xmlMemBlocks();
- mem = xmlMemUsed();
- if ((blocks != 0) || (mem != 0)) {
- printf("testapi leaked %d bytes in %d blocks\\n", mem, blocks);
- }
- xmlMemoryDump();
-
- return (ret != 0);
-}
-
-""");
-
-#
-# Load the interfaces
-#
-for file in headers:
- name = file.xpathEval('string(@name)')
- if (name == None) or (name == ''):
- continue
-
- #
- # Some module may be skipped because they don't really consists
- # of user callable APIs
- #
- if is_skipped_module(name):
- continue
-
- #
- # do not test deprecated APIs
- #
- desc = file.xpathEval('string(description)')
- if string.find(desc, 'DEPRECATED') != -1:
- print "Skipping deprecated interface %s" % name
- continue;
-
- test.write("#include <libxml/%s.h>\n" % name)
- modules.append(name)
-
-#
-# Generate the callers signatures
-#
-for module in modules:
- test.write("static int test_%s(void);\n" % module);
+missing_functions = {}
+def add_missing_functions(name, module):
+ try:
+ list = missing_functions[module]
+ list.append(name)
+ except:
+ missing_functions[module] = [name]
#
# Provide the type generators and destructors for the parameters
@@ -281,18 +193,12 @@
(function == 'xmlTextMerge') or \
(function == 'xmlAddPrevSibling' and pos == 2):
return('xmlNodePtr_in');
+ if res == 'const xmlBufferPtr':
+ res = 'xmlBufferPtr';
return res
-known_param_types = [ "int", "const_char_ptr", "const_xmlChar_ptr",
- "xmlParserCtxtPtr", "xmlDocPtr", "filepath", "fileoutput",
- "xmlNodePtr", "xmlNodePtr_in", "userdata", "xmlChar_ptr",
- "xmlTextWriterPtr", "xmlTextReaderPtr", "xmlBufferPtr",
- "xmlListPtr", "xmlXPathObjectPtr", "xmlHashTablePtr", "xmlValidCtxtPtr",
- "void_ptr", "xmlOutputBufferPtr", "xmlCharEncoding",
- "unsigned_int", "long", "unsigned_long", "const_void_ptr",
- "unsigned_long_ptr", "int_ptr", "FILE_ptr", "xmlDictPtr",
-]
+known_param_types = []
def is_known_param_type(name):
for type in known_param_types:
@@ -300,339 +206,11 @@
return 1
return 0
-test.write("""
-#define gen_nb_void_ptr 2
-
-static void *gen_void_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_void_ptr(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_const_void_ptr 2
-
-static const void *gen_const_void_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((const void *) "immutable string");
- return(NULL);
-}
-static void des_const_void_ptr(int no ATTRIBUTE_UNUSED, const void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_userdata 3
-
-static void *gen_userdata(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((void *) &call_tests);
- if (no == 1) return((void *) -1);
- return(NULL);
-}
-static void des_userdata(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-
-#define gen_nb_int 4
-
-static int gen_int(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 1) return(-1);
- if (no == 2) return(122);
- return(-1);
-}
-
-static void des_int(int no ATTRIBUTE_UNUSED, int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_long 4
-
-static long gen_long(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 1) return(-1);
- if (no == 2) return(122);
- return(-1);
-}
-
-static void des_long(int no ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_int 3
-
-static unsigned int gen_unsigned_int(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 2) return(122);
- return(-1);
-}
-
-static void des_unsigned_int(int no ATTRIBUTE_UNUSED, unsigned int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_long 3
-
-static unsigned long gen_unsigned_long(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 2) return(122);
- return(-1);
-}
-
-static void des_unsigned_long(int no ATTRIBUTE_UNUSED, unsigned long val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_long_ptr 2
-
-static unsigned long *gen_unsigned_long_ptr(int no, int nr) {
- if (no == 0) return(&longtab[nr]);
- return(NULL);
-}
-
-static void des_unsigned_long_ptr(int no ATTRIBUTE_UNUSED, unsigned long *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_int_ptr 2
-
-static int *gen_int_ptr(int no, int nr) {
- if (no == 0) return(&inttab[nr]);
- return(NULL);
-}
-
-static void des_int_ptr(int no ATTRIBUTE_UNUSED, int *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_const_char_ptr 4
-
-static const char *gen_const_char_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return("foo");
- if (no == 1) return("<foo/>");
- if (no == 2) return("test/ent2");
- return(NULL);
-}
-static void des_const_char_ptr(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlChar_ptr 2
-
-static xmlChar *gen_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(&chartab[0]);
- return(NULL);
-}
-static void des_xmlChar_ptr(int no ATTRIBUTE_UNUSED, xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_FILE_ptr 2
-
-static FILE *gen_FILE_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(fopen("test.out", "a+"));
- return(NULL);
-}
-static void des_FILE_ptr(int no ATTRIBUTE_UNUSED, FILE *val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) fclose(val);
-}
-
-#define gen_nb_const_xmlChar_ptr 5
-
-static const xmlChar *gen_const_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((const xmlChar *) "foo");
- if (no == 1) return((const xmlChar *) "<foo/>");
- if (no == 2) return((const xmlChar *) "nøne");
- if (no == 3) return((const xmlChar *) " 2ab ");
- return(NULL);
-}
-static void des_const_xmlChar_ptr(int no ATTRIBUTE_UNUSED, const xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_filepath 8
-
-static const char *gen_filepath(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return("missing.xml");
- if (no == 1) return("<foo/>");
- if (no == 2) return("test/ent2");
- if (no == 3) return("test/valid/REC-xml-19980210.xml");
- if (no == 4) return("test/valid/dtds/xhtml1-strict.dtd");
- if (no == 5) return("http://missing.example.org/");
- if (no == 6) return("http://missing. example.org/");
- return(NULL);
-}
-static void des_filepath(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_fileoutput 6
-
-static const char *gen_fileoutput(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return("/missing.xml");
- if (no == 1) return("<foo/>");
- if (no == 2) return("ftp://missing.example.org/foo");
- if (no == 3) return("http://missing.example.org/");
- if (no == 4) return("http://missing. example.org/");
- return(NULL);
-}
-static void des_fileoutput(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlParserCtxtPtr 2
-static xmlParserCtxtPtr gen_xmlParserCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewParserCtxt());
- return(NULL);
-}
-static void des_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlParserCtxtPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlFreeParserCtxt(val);
-}
-
-#define gen_nb_xmlValidCtxtPtr 2
-static xmlValidCtxtPtr gen_xmlValidCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewValidCtxt());
- return(NULL);
-}
-static void des_xmlValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlValidCtxtPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlFreeValidCtxt(val);
-}
-
-#define gen_nb_xmlDocPtr 3
-static xmlDocPtr gen_xmlDocPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewDoc(BAD_CAST "1.0"));
- if (no == 1) return(xmlReadMemory("<foo/>", 6, "test", NULL, 0));
- return(NULL);
-}
-static void des_xmlDocPtr(int no ATTRIBUTE_UNUSED, xmlDocPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlFreeDoc(val);
-}
-
-#define gen_nb_xmlDictPtr 2
-static xmlDictPtr gen_xmlDictPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlDictCreate());
- return(NULL);
-}
-static void des_xmlDictPtr(int no ATTRIBUTE_UNUSED, xmlDictPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlDictFree(val);
-}
-
-#define gen_nb_xmlNodePtr 2
-static xmlNodePtr gen_xmlNodePtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewPI(BAD_CAST "test", NULL));
- return(NULL);
-}
-static void des_xmlNodePtr(int no ATTRIBUTE_UNUSED, xmlNodePtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlUnlinkNode(val);
- xmlFreeNode(val);
- }
-}
-
-#define gen_nb_xmlNodePtr_in 3
-static xmlNodePtr gen_xmlNodePtr_in(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewPI(BAD_CAST "test", NULL));
- if (no == 0) return(xmlNewText(BAD_CAST "text"));
- return(NULL);
-}
-static void des_xmlNodePtr_in(int no ATTRIBUTE_UNUSED, xmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlTextWriterPtr 2
-static xmlTextWriterPtr gen_xmlTextWriterPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewTextWriterFilename("test.out", 0));
- return(NULL);
-}
-static void des_xmlTextWriterPtr(int no ATTRIBUTE_UNUSED, xmlTextWriterPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) xmlFreeTextWriter(val);
-}
-
-#define gen_nb_xmlTextReaderPtr 4
-static xmlTextReaderPtr gen_xmlTextReaderPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewTextReaderFilename("test/ent2"));
- if (no == 1) return(xmlNewTextReaderFilename("test/valid/REC-xml-19980210.xml"));
- if (no == 2) return(xmlNewTextReaderFilename("test/valid/dtds/xhtml1-strict.dtd"));
- return(NULL);
-}
-static void des_xmlTextReaderPtr(int no ATTRIBUTE_UNUSED, xmlTextReaderPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) xmlFreeTextReader(val);
-}
-
-#define gen_nb_xmlBufferPtr 2
-static xmlBufferPtr gen_xmlBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlBufferCreate());
- return(NULL);
-}
-static void des_xmlBufferPtr(int no ATTRIBUTE_UNUSED, xmlBufferPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlBufferFree(val);
- }
-}
-
-#define gen_nb_xmlListPtr 2
-static xmlListPtr gen_xmlListPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlListCreate(NULL, NULL));
- return(NULL);
-}
-static void des_xmlListPtr(int no ATTRIBUTE_UNUSED, xmlListPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlListDelete(val);
- }
-}
-
-#define gen_nb_xmlHashTablePtr 2
-static xmlHashTablePtr gen_xmlHashTablePtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlHashCreate(10));
- return(NULL);
-}
-static void des_xmlHashTablePtr(int no ATTRIBUTE_UNUSED, xmlHashTablePtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlHashFree(val, NULL);
- }
-}
-
-#include <libxml/xpathInternals.h>
-
-#define gen_nb_xmlXPathObjectPtr 5
-static xmlXPathObjectPtr gen_xmlXPathObjectPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlXPathNewString(BAD_CAST "string object"));
- if (no == 1) return(xmlXPathNewFloat(1.1));
- if (no == 2) return(xmlXPathNewBoolean(1));
- if (no == 3) return(xmlXPathNewNodeSet(NULL));
- return(NULL);
-}
-static void des_xmlXPathObjectPtr(int no ATTRIBUTE_UNUSED, xmlXPathObjectPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlXPathFreeObject(val);
- }
-}
-
-#define gen_nb_xmlOutputBufferPtr 2
-static xmlOutputBufferPtr gen_xmlOutputBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlOutputBufferCreateFilename("test.out", NULL, 0));
- return(NULL);
-}
-static void des_xmlOutputBufferPtr(int no ATTRIBUTE_UNUSED, xmlOutputBufferPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlOutputBufferClose(val);
- }
-}
-
-#define gen_nb_xmlCharEncoding 4
-static xmlCharEncoding gen_xmlCharEncoding(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(XML_CHAR_ENCODING_UTF8);
- if (no == 1) return(XML_CHAR_ENCODING_NONE);
- if (no == 0) return(XML_CHAR_ENCODING_8859_1);
- return(XML_CHAR_ENCODING_ERROR);
-}
-static void des_xmlCharEncoding(int no ATTRIBUTE_UNUSED, xmlCharEncoding val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-""");
-
#
# Provide the type destructors for the return values
#
-known_return_types = [ "int", "const_char_ptr", "xmlDocPtr", "xmlNodePtr",
- "xmlChar_ptr", "const_xmlChar_ptr", "void_ptr",
- "xmlXPathObjectPtr", "xmlCharEncoding", "long",
- "const_void_ptr", "double", "xmlTextReaderPtr",
- "xmlDictPtr",
-]
+known_return_types = []
def is_known_return_type(name):
for type in known_return_types:
@@ -640,44 +218,90 @@
return 1
return 0
-test.write("""
-static void desret_int(int val ATTRIBUTE_UNUSED) {
-}
-static void desret_long(long val ATTRIBUTE_UNUSED) {
-}
-static void desret_double(double val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlCharEncoding(xmlCharEncoding val ATTRIBUTE_UNUSED) {
-}
-static void desret_const_void_ptr(void *val ATTRIBUTE_UNUSED) {
-}
-static void desret_void_ptr(void *val ATTRIBUTE_UNUSED) {
-}
-static void desret_const_char_ptr(const char *val ATTRIBUTE_UNUSED) {
-}
-static void desret_const_xmlChar_ptr(const xmlChar *val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlChar_ptr(xmlChar *val) {
- if (val != NULL)
- xmlFree(val);
-}
-static void desret_xmlDocPtr(xmlDocPtr val) {
- xmlFreeDoc(val);
-}
-static void desret_xmlDictPtr(xmlDictPtr val) {
- xmlDictFree(val);
-}
-static void desret_xmlTextReaderPtr(xmlTextReaderPtr val) {
- xmlFreeTextReader(val);
-}
-static void desret_xmlNodePtr(xmlNodePtr val) {
- xmlUnlinkNode(val);
- xmlFreeNode(val);
-}
-static void desret_xmlXPathObjectPtr(xmlXPathObjectPtr val) {
- xmlXPathFreeObject(val);
-}
-""");
+#
+# Copy the beginning of the C test program result
+#
+
+input = open("testapi.c", "r")
+test = open('testapi.c.new', 'w')
+
+def compare_and_save():
+ global test
+
+ test.close()
+ input = open("testapi.c", "r").read()
+ test = open('testapi.c.new', "r").read()
+ if input != test:
+ os.system("rm testapi.c ; mv testapi.c.new testapi.c")
+ print("Updated testapi.c")
+ else:
+ print("Generated testapi.c is identical")
+
+line = input.readline()
+while line != "":
+ if line == "/* CUT HERE: everything below that line is generated */\n":
+ break;
+ if line[0:15] == "#define gen_nb_":
+ type = string.split(line[15:])[0]
+ known_param_types.append(type)
+ if line[0:19] == "static void desret_":
+ type = string.split(line[19:], '(')[0]
+ known_return_types.append(type)
+ test.write(line)
+ line = input.readline()
+input.close()
+
+if line == "":
+ print "Could not find the CUT marker in testapi.c skipping generation"
+ test.close()
+ sys.exit(0)
+
+print("Scanned testapi.c: found %d parameters types and %d return types\n" % (
+ len(known_param_types), len(known_return_types)))
+test.write("/* CUT HERE: everything below that line is generated */\n")
+
+
+#
+# Open the input API description
+#
+doc = libxml2.readFile('doc/libxml2-api.xml', None, 0)
+if doc == None:
+ print "Failed to load doc/libxml2-api.xml"
+ sys.exit(1)
+ctxt = doc.xpathNewContext()
+headers = ctxt.xpathEval("/api/files/file")
+
+#
+# Load the interfaces
+#
+for file in headers:
+ name = file.xpathEval('string(@name)')
+ if (name == None) or (name == ''):
+ continue
+
+ #
+ # Some module may be skipped because they don't really consists
+ # of user callable APIs
+ #
+ if is_skipped_module(name):
+ continue
+
+ #
+ # do not test deprecated APIs
+ #
+ desc = file.xpathEval('string(description)')
+ if string.find(desc, 'DEPRECATED') != -1:
+ print "Skipping deprecated interface %s" % name
+ continue;
+
+ test.write("#include <libxml/%s.h>\n" % name)
+ modules.append(name)
+
+#
+# Generate the callers signatures
+#
+for module in modules:
+ test.write("static int test_%s(void);\n" % module);
#
# Generate the top caller
@@ -773,6 +397,7 @@
break
if no_gen == 1:
+ add_missing_functions(name, module)
test.write("""
/* missing type support */
return(ret);
@@ -826,6 +451,8 @@
i = i + 1;
# do the call, and clanup the result
+ if extra_pre_call.has_key(name):
+ test.write(" %s\n"% (extra_pre_call[name]))
if t_ret != None:
test.write("\n ret_val = %s(" % (name))
need = 0
@@ -940,6 +567,8 @@
print "Generated test for %d modules and %d functions" %(len(modules), nb_tests)
+compare_and_save()
+
missing_list = []
for missing in missing_types.keys():
if missing == 'va_list' or missing == '...':
@@ -954,6 +583,8 @@
missing_list.sort(compare_missing)
print "Missing support for %d types see missing.lst" % (len(missing_list))
lst = open("missing.lst", "w")
+lst.write("Missing support for %d types" % (len(missing_list)))
+lst.write("\n")
for miss in missing_list:
lst.write("%s: %d :" % (miss[1], miss[0]))
i = 0
@@ -964,8 +595,12 @@
break
lst.write(" %s" % (n))
lst.write("\n")
+lst.write("\n")
+lst.write("\n")
+lst.write("Missing support per module");
+for module in missing_functions.keys():
+ lst.write("module %s:\n %s\n" % (module, missing_functions[module]))
lst.close()
-test.close()
diff --git a/include/libxml/nanoftp.h b/include/libxml/nanoftp.h
index 95280db..e3c28a0 100644
--- a/include/libxml/nanoftp.h
+++ b/include/libxml/nanoftp.h
@@ -109,10 +109,10 @@
*/
XMLPUBFUN int XMLCALL
xmlNanoFTPCwd (void *ctx,
- char *directory);
+ const char *directory);
XMLPUBFUN int XMLCALL
xmlNanoFTPDele (void *ctx,
- char *file);
+ const char *file);
XMLPUBFUN int XMLCALL
xmlNanoFTPGetConnection (void *ctx);
@@ -122,7 +122,7 @@
xmlNanoFTPList (void *ctx,
ftpListCallback callback,
void *userData,
- char *filename);
+ const char *filename);
XMLPUBFUN int XMLCALL
xmlNanoFTPGetSocket (void *ctx,
const char *filename);
diff --git a/nanoftp.c b/nanoftp.c
index 0002226..5870936 100644
--- a/nanoftp.c
+++ b/nanoftp.c
@@ -1471,7 +1471,7 @@
*/
int
-xmlNanoFTPCwd(void *ctx, char *directory) {
+xmlNanoFTPCwd(void *ctx, const char *directory) {
xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
char buf[400];
int len;
@@ -1517,7 +1517,7 @@
*/
int
-xmlNanoFTPDele(void *ctx, char *file) {
+xmlNanoFTPDele(void *ctx, const char *file) {
xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
char buf[400];
int len;
@@ -1913,7 +1913,7 @@
int
xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData,
- char *filename) {
+ const char *filename) {
xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
char buf[4096 + 1];
int len, res;
diff --git a/parser.c b/parser.c
index 22c4f6a..d8d3681 100644
--- a/parser.c
+++ b/parser.c
@@ -1416,7 +1416,7 @@
*/
xmlChar
xmlPopInput(xmlParserCtxtPtr ctxt) {
- if (ctxt->inputNr == 1) return(0); /* End of main Input */
+ if (ctxt->inputNr <= 1) return(0); /* End of main Input */
if (xmlParserDebugEntities)
xmlGenericError(xmlGenericErrorContext,
"Popping input %d\n", ctxt->inputNr);
@@ -3203,15 +3203,17 @@
const xmlChar *tmp = ctxt->input->cur;
ctxt->input->cur = in;
- if (ctxt->sax->ignorableWhitespace !=
- ctxt->sax->characters) {
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->ignorableWhitespace !=
+ ctxt->sax->characters)) {
if (areBlanks(ctxt, tmp, nbchar, 1)) {
ctxt->sax->ignorableWhitespace(ctxt->userData,
tmp, nbchar);
} else if (ctxt->sax->characters != NULL)
ctxt->sax->characters(ctxt->userData,
tmp, nbchar);
- } else if (ctxt->sax->characters != NULL) {
+ } else if ((ctxt->sax != NULL) &&
+ (ctxt->sax->characters != NULL)) {
ctxt->sax->characters(ctxt->userData,
tmp, nbchar);
}
@@ -3245,7 +3247,8 @@
}
nbchar = in - ctxt->input->cur;
if (nbchar > 0) {
- if ((ctxt->sax->ignorableWhitespace !=
+ if ((ctxt->sax != NULL) &&
+ (ctxt->sax->ignorableWhitespace !=
ctxt->sax->characters) &&
(IS_BLANK_CH(*ctxt->input->cur))) {
const xmlChar *tmp = ctxt->input->cur;
@@ -3259,7 +3262,7 @@
tmp, nbchar);
line = ctxt->input->line;
col = ctxt->input->col;
- } else {
+ } else if (ctxt->sax != NULL) {
if (ctxt->sax->characters != NULL)
ctxt->sax->characters(ctxt->userData,
ctxt->input->cur, nbchar);
@@ -10271,7 +10274,8 @@
if (input == NULL) {
if (sax != NULL) ctxt->sax = NULL;
xmlFreeParserCtxt(ctxt);
- xmlFree(systemIdCanonic);
+ if (systemIdCanonic != NULL)
+ xmlFree(systemIdCanonic);
return(NULL);
}
@@ -11716,6 +11720,10 @@
}
if (sax != NULL)
ctxt->sax = NULL;
+ if (ctxt->myDoc != NULL) {
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
xmlFreeParserCtxt(ctxt);
return ret;
@@ -11918,6 +11926,10 @@
ret = -1;
}
ctxt->sax = oldsax;
+ if (ctxt->myDoc != NULL) {
+ xmlFreeDoc(ctxt->myDoc);
+ ctxt->myDoc = NULL;
+ }
xmlFreeParserCtxt(ctxt);
return ret;
@@ -11962,12 +11974,14 @@
xmlDocPtr ret;
xmlParserCtxtPtr ctxt;
- if (cur == NULL) return(NULL);
+ if ((cur == NULL) || (sax == NULL)) return(NULL);
ctxt = xmlCreateDocParserCtxt(cur);
if (ctxt == NULL) return(NULL);
if (sax != NULL) {
+ if (ctxt->sax != NULL)
+ xmlFree(ctxt->sax);
ctxt->sax = sax;
ctxt->userData = NULL;
}
@@ -11980,7 +11994,7 @@
xmlFreeDoc(ctxt->myDoc);
ctxt->myDoc = NULL;
}
- if (sax != NULL)
+ if (sax != NULL)
ctxt->sax = NULL;
xmlFreeParserCtxt(ctxt);
diff --git a/python/libxml2class.txt b/python/libxml2class.txt
index e9e447d..972074c 100644
--- a/python/libxml2class.txt
+++ b/python/libxml2class.txt
@@ -156,6 +156,7 @@
# functions from module relaxng
relaxNGCleanupTypes()
+relaxNGInitTypes()
relaxNGNewMemParserCtxt()
relaxNGNewParserCtxt()
diff --git a/testapi.c b/testapi.c
index 49f6d60..352ad7e 100644
--- a/testapi.c
+++ b/testapi.c
@@ -83,35 +83,6 @@
#include <libxml/xmlwriter.h>
#include <libxml/xpath.h>
#include <libxml/xpointer.h>
-static int test_HTMLparser(void);
-static int test_HTMLtree(void);
-static int test_catalog(void);
-static int test_chvalid(void);
-static int test_dict(void);
-static int test_encoding(void);
-static int test_entities(void);
-static int test_hash(void);
-static int test_list(void);
-static int test_nanoftp(void);
-static int test_nanohttp(void);
-static int test_parser(void);
-static int test_pattern(void);
-static int test_relaxng(void);
-static int test_schemasInternals(void);
-static int test_tree(void);
-static int test_uri(void);
-static int test_valid(void);
-static int test_xinclude(void);
-static int test_xmlIO(void);
-static int test_xmlerror(void);
-static int test_xmlreader(void);
-static int test_xmlsave(void);
-static int test_xmlschemas(void);
-static int test_xmlschemastypes(void);
-static int test_xmlstring(void);
-static int test_xmlwriter(void);
-static int test_xpath(void);
-static int test_xpointer(void);
#define gen_nb_void_ptr 2
@@ -291,6 +262,14 @@
xmlFreeParserCtxt(val);
}
+#define gen_nb_xmlSAXHandlerPtr 2
+static xmlSAXHandlerPtr gen_xmlSAXHandlerPtr(int no, int nr ATTRIBUTE_UNUSED) {
+ if (no == 0) return((xmlSAXHandlerPtr) &xmlDefaultSAXHandler);
+ return(NULL);
+}
+static void des_xmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, xmlSAXHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
#define gen_nb_xmlValidCtxtPtr 2
static xmlValidCtxtPtr gen_xmlValidCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return(xmlNewValidCtxt());
@@ -301,6 +280,22 @@
xmlFreeValidCtxt(val);
}
+#define gen_nb_xmlParserInputBufferPtr 8
+
+static xmlParserInputBufferPtr gen_xmlParserInputBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
+ if (no == 0) return(xmlParserInputBufferCreateFilename("missing.xml", XML_CHAR_ENCODING_NONE));
+ if (no == 1) return(xmlParserInputBufferCreateFilename("<foo/>", XML_CHAR_ENCODING_NONE));
+ if (no == 2) return(xmlParserInputBufferCreateFilename("test/ent2", XML_CHAR_ENCODING_NONE));
+ if (no == 3) return(xmlParserInputBufferCreateFilename("test/valid/REC-xml-19980210.xml", XML_CHAR_ENCODING_NONE));
+ if (no == 4) return(xmlParserInputBufferCreateFilename("test/valid/dtds/xhtml1-strict.dtd", XML_CHAR_ENCODING_NONE));
+ if (no == 5) return(xmlParserInputBufferCreateFilename("http://missing.example.org/", XML_CHAR_ENCODING_NONE));
+ if (no == 6) return(xmlParserInputBufferCreateFilename("http://missing. example.org/", XML_CHAR_ENCODING_NONE));
+ return(NULL);
+}
+static void des_xmlParserInputBufferPtr(int no ATTRIBUTE_UNUSED, xmlParserInputBufferPtr val, int nr ATTRIBUTE_UNUSED) {
+ xmlFreeParserInputBuffer(val);
+}
+
#define gen_nb_xmlDocPtr 3
static xmlDocPtr gen_xmlDocPtr(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return(xmlNewDoc(BAD_CAST "1.0"));
@@ -363,9 +358,10 @@
if (val != NULL) xmlFreeTextReader(val);
}
-#define gen_nb_xmlBufferPtr 2
+#define gen_nb_xmlBufferPtr 3
static xmlBufferPtr gen_xmlBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return(xmlBufferCreate());
+ if (no == 1) return(xmlBufferCreateStatic((void *)"static buffer", 13));
return(NULL);
}
static void des_xmlBufferPtr(int no ATTRIBUTE_UNUSED, xmlBufferPtr val, int nr ATTRIBUTE_UNUSED) {
@@ -467,9 +463,75 @@
xmlUnlinkNode(val);
xmlFreeNode(val);
}
+static void desret_xmlDtdPtr(xmlDtdPtr val) {
+ desret_xmlNodePtr((xmlNodePtr)val);
+}
static void desret_xmlXPathObjectPtr(xmlXPathObjectPtr val) {
xmlXPathFreeObject(val);
}
+static void desret_xmlParserCtxtPtr(xmlParserCtxtPtr val) {
+ xmlFreeParserCtxt(val);
+}
+
+/* CUT HERE: everything below that line is generated */
+#include <libxml/HTMLparser.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/catalog.h>
+#include <libxml/chvalid.h>
+#include <libxml/dict.h>
+#include <libxml/encoding.h>
+#include <libxml/entities.h>
+#include <libxml/hash.h>
+#include <libxml/list.h>
+#include <libxml/nanoftp.h>
+#include <libxml/nanohttp.h>
+#include <libxml/parser.h>
+#include <libxml/pattern.h>
+#include <libxml/relaxng.h>
+#include <libxml/schemasInternals.h>
+#include <libxml/tree.h>
+#include <libxml/uri.h>
+#include <libxml/valid.h>
+#include <libxml/xinclude.h>
+#include <libxml/xmlIO.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xmlreader.h>
+#include <libxml/xmlsave.h>
+#include <libxml/xmlschemas.h>
+#include <libxml/xmlschemastypes.h>
+#include <libxml/xmlstring.h>
+#include <libxml/xmlwriter.h>
+#include <libxml/xpath.h>
+#include <libxml/xpointer.h>
+static int test_HTMLparser(void);
+static int test_HTMLtree(void);
+static int test_catalog(void);
+static int test_chvalid(void);
+static int test_dict(void);
+static int test_encoding(void);
+static int test_entities(void);
+static int test_hash(void);
+static int test_list(void);
+static int test_nanoftp(void);
+static int test_nanohttp(void);
+static int test_parser(void);
+static int test_pattern(void);
+static int test_relaxng(void);
+static int test_schemasInternals(void);
+static int test_tree(void);
+static int test_uri(void);
+static int test_valid(void);
+static int test_xinclude(void);
+static int test_xmlIO(void);
+static int test_xmlerror(void);
+static int test_xmlreader(void);
+static int test_xmlsave(void);
+static int test_xmlschemas(void);
+static int test_xmlschemastypes(void);
+static int test_xmlstring(void);
+static int test_xmlwriter(void);
+static int test_xpath(void);
+static int test_xpointer(void);
/**
* testlibxml2:
@@ -592,8 +654,39 @@
test_htmlCreateMemoryParserCtxt(void) {
int ret = 0;
+#ifdef LIBXML_HTML_ENABLED
+ int mem_base;
+ htmlParserCtxtPtr ret_val;
+ const char * buffer; /* a pointer to a char array */
+ int n_buffer;
+ int size; /* the size of the array */
+ int n_size;
- /* missing type support */
+ for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
+ for (n_size = 0;n_size < gen_nb_int;n_size++) {
+ mem_base = xmlMemBlocks();
+ buffer = gen_const_char_ptr(n_buffer, 0);
+ size = gen_int(n_size, 1);
+
+ ret_val = htmlCreateMemoryParserCtxt(buffer, size);
+ desret_xmlParserCtxtPtr(ret_val);
+ call_tests++;
+ des_const_char_ptr(n_buffer, buffer, 0);
+ des_int(n_size, size, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in htmlCreateMemoryParserCtxt",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_buffer);
+ printf(" %d", n_size);
+ printf("\n");
+ }
+ }
+ }
+#endif
+
+ function_tests++;
return(ret);
}
@@ -1473,7 +1566,7 @@
test_HTMLparser(void) {
int ret = 0;
- printf("Testing HTMLparser : 18 of 37 functions ...\n");
+ printf("Testing HTMLparser : 19 of 37 functions ...\n");
ret += test_UTF8ToHtml();
ret += test_htmlAttrAllowed();
ret += test_htmlAutoCloseTag();
@@ -6277,8 +6370,30 @@
test_xmlCreateDocParserCtxt(void) {
int ret = 0;
+ int mem_base;
+ xmlParserCtxtPtr ret_val;
+ const xmlChar * cur; /* a pointer to an array of xmlChar */
+ int n_cur;
- /* missing type support */
+ for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
+ mem_base = xmlMemBlocks();
+ cur = gen_const_xmlChar_ptr(n_cur, 0);
+
+ ret_val = xmlCreateDocParserCtxt(cur);
+ desret_xmlParserCtxtPtr(ret_val);
+ call_tests++;
+ des_const_xmlChar_ptr(n_cur, cur, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlCreateDocParserCtxt",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_cur);
+ printf("\n");
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -6297,8 +6412,60 @@
test_xmlCreatePushParserCtxt(void) {
int ret = 0;
+#ifdef LIBXML_PUSH_ENABLED
+ int mem_base;
+ xmlParserCtxtPtr ret_val;
+ xmlSAXHandlerPtr sax; /* a SAX handler */
+ int n_sax;
+ void * user_data; /* The user data returned on SAX callbacks */
+ int n_user_data;
+ const char * chunk; /* a pointer to an array of chars */
+ int n_chunk;
+ int size; /* number of chars in the array */
+ int n_size;
+ const char * filename; /* an optional file name or URI */
+ int n_filename;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
+ for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) {
+ for (n_size = 0;n_size < gen_nb_int;n_size++) {
+ for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ user_data = gen_userdata(n_user_data, 1);
+ chunk = gen_const_char_ptr(n_chunk, 2);
+ size = gen_int(n_size, 3);
+ filename = gen_filepath(n_filename, 4);
+
+ ret_val = xmlCreatePushParserCtxt(sax, user_data, chunk, size, filename);
+ desret_xmlParserCtxtPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_userdata(n_user_data, user_data, 1);
+ des_const_char_ptr(n_chunk, chunk, 2);
+ des_int(n_size, size, 3);
+ des_filepath(n_filename, filename, 4);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlCreatePushParserCtxt",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_user_data);
+ printf(" %d", n_chunk);
+ printf(" %d", n_size);
+ printf(" %d", n_filename);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+ }
+#endif
+
+ function_tests++;
return(ret);
}
@@ -6682,8 +6849,45 @@
test_xmlIOParseDTD(void) {
int ret = 0;
+ int mem_base;
+ xmlDtdPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block or NULL */
+ int n_sax;
+ xmlParserInputBufferPtr input; /* an Input Buffer */
+ int n_input;
+ xmlCharEncoding enc; /* the charset encoding if known */
+ int n_enc;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
+ for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ input = gen_xmlParserInputBufferPtr(n_input, 1);
+ enc = gen_xmlCharEncoding(n_enc, 2);
+
+ ret_val = xmlIOParseDTD(sax, input, enc);
+ input = NULL;
+ desret_xmlDtdPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_xmlParserInputBufferPtr(n_input, input, 1);
+ des_xmlCharEncoding(n_enc, enc, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlIOParseDTD",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_input);
+ printf(" %d", n_enc);
+ printf("\n");
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -6841,8 +7045,23 @@
test_xmlNewParserCtxt(void) {
int ret = 0;
+ int mem_base;
+ xmlParserCtxtPtr ret_val;
- /* missing type support */
+ mem_base = xmlMemBlocks();
+
+ ret_val = xmlNewParserCtxt();
+ desret_xmlParserCtxtPtr(ret_val);
+ call_tests++;
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlNewParserCtxt",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf("\n");
+ }
+
+ function_tests++;
return(ret);
}
@@ -6936,8 +7155,37 @@
test_xmlParseDTD(void) {
int ret = 0;
+ int mem_base;
+ xmlDtdPtr ret_val;
+ const xmlChar * ExternalID; /* a NAME* containing the External ID of the DTD */
+ int n_ExternalID;
+ const xmlChar * SystemID; /* a NAME* containing the URL to the DTD */
+ int n_SystemID;
- /* missing type support */
+ for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
+ for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
+ mem_base = xmlMemBlocks();
+ ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 0);
+ SystemID = gen_const_xmlChar_ptr(n_SystemID, 1);
+
+ ret_val = xmlParseDTD(ExternalID, SystemID);
+ desret_xmlDtdPtr(ret_val);
+ call_tests++;
+ des_const_xmlChar_ptr(n_ExternalID, ExternalID, 0);
+ des_const_xmlChar_ptr(n_SystemID, SystemID, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlParseDTD",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_ExternalID);
+ printf(" %d", n_SystemID);
+ printf("\n");
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7509,8 +7757,44 @@
test_xmlSAXParseDTD(void) {
int ret = 0;
+ int mem_base;
+ xmlDtdPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ const xmlChar * ExternalID; /* a NAME* containing the External ID of the DTD */
+ int n_ExternalID;
+ const xmlChar * SystemID; /* a NAME* containing the URL to the DTD */
+ int n_SystemID;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
+ for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1);
+ SystemID = gen_const_xmlChar_ptr(n_SystemID, 2);
+
+ ret_val = xmlSAXParseDTD(sax, ExternalID, SystemID);
+ desret_xmlDtdPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_const_xmlChar_ptr(n_ExternalID, ExternalID, 1);
+ des_const_xmlChar_ptr(n_SystemID, SystemID, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseDTD",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_ExternalID);
+ printf(" %d", n_SystemID);
+ printf("\n");
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7519,8 +7803,44 @@
test_xmlSAXParseDoc(void) {
int ret = 0;
+ int mem_base;
+ xmlDocPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ xmlChar * cur; /* a pointer to an array of xmlChar */
+ int n_cur;
+ int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
+ int n_recovery;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_cur = 0;n_cur < gen_nb_xmlChar_ptr;n_cur++) {
+ for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ cur = gen_xmlChar_ptr(n_cur, 1);
+ recovery = gen_int(n_recovery, 2);
+
+ ret_val = xmlSAXParseDoc(sax, cur, recovery);
+ desret_xmlDocPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_xmlChar_ptr(n_cur, cur, 1);
+ des_int(n_recovery, recovery, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseDoc",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_cur);
+ printf(" %d", n_recovery);
+ printf("\n");
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7529,8 +7849,37 @@
test_xmlSAXParseEntity(void) {
int ret = 0;
+ int mem_base;
+ xmlDocPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ const char * filename; /* the filename */
+ int n_filename;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ filename = gen_filepath(n_filename, 1);
+
+ ret_val = xmlSAXParseEntity(sax, filename);
+ desret_xmlDocPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_filepath(n_filename, filename, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseEntity",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_filename);
+ printf("\n");
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7539,8 +7888,44 @@
test_xmlSAXParseFile(void) {
int ret = 0;
+ int mem_base;
+ xmlDocPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ const char * filename; /* the filename */
+ int n_filename;
+ int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
+ int n_recovery;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
+ for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ filename = gen_filepath(n_filename, 1);
+ recovery = gen_int(n_recovery, 2);
+
+ ret_val = xmlSAXParseFile(sax, filename, recovery);
+ desret_xmlDocPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_filepath(n_filename, filename, 1);
+ des_int(n_recovery, recovery, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseFile",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_filename);
+ printf(" %d", n_recovery);
+ printf("\n");
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7549,8 +7934,51 @@
test_xmlSAXParseFileWithData(void) {
int ret = 0;
+ int mem_base;
+ xmlDocPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ const char * filename; /* the filename */
+ int n_filename;
+ int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
+ int n_recovery;
+ void * data; /* the userdata */
+ int n_data;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
+ for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
+ for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ filename = gen_filepath(n_filename, 1);
+ recovery = gen_int(n_recovery, 2);
+ data = gen_userdata(n_data, 3);
+
+ ret_val = xmlSAXParseFileWithData(sax, filename, recovery, data);
+ desret_xmlDocPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_filepath(n_filename, filename, 1);
+ des_int(n_recovery, recovery, 2);
+ des_userdata(n_data, data, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseFileWithData",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_filename);
+ printf(" %d", n_recovery);
+ printf(" %d", n_data);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7559,8 +7987,51 @@
test_xmlSAXParseMemory(void) {
int ret = 0;
+ int mem_base;
+ xmlDocPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ const char * buffer; /* an pointer to a char array */
+ int n_buffer;
+ int size; /* the size of the array */
+ int n_size;
+ int recovery; /* work in recovery mode, i.e. tries to read not Well Formed documents */
+ int n_recovery;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
+ for (n_size = 0;n_size < gen_nb_int;n_size++) {
+ for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ buffer = gen_const_char_ptr(n_buffer, 1);
+ size = gen_int(n_size, 2);
+ recovery = gen_int(n_recovery, 3);
+
+ ret_val = xmlSAXParseMemory(sax, buffer, size, recovery);
+ desret_xmlDocPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_const_char_ptr(n_buffer, buffer, 1);
+ des_int(n_size, size, 2);
+ des_int(n_recovery, recovery, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseMemory",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_buffer);
+ printf(" %d", n_size);
+ printf(" %d", n_recovery);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7569,8 +8040,58 @@
test_xmlSAXParseMemoryWithData(void) {
int ret = 0;
+ int mem_base;
+ xmlDocPtr ret_val;
+ xmlSAXHandlerPtr sax; /* the SAX handler block */
+ int n_sax;
+ const char * buffer; /* an pointer to a char array */
+ int n_buffer;
+ int size; /* the size of the array */
+ int n_size;
+ int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
+ int n_recovery;
+ void * data; /* the userdata */
+ int n_data;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
+ for (n_size = 0;n_size < gen_nb_int;n_size++) {
+ for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
+ for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ buffer = gen_const_char_ptr(n_buffer, 1);
+ size = gen_int(n_size, 2);
+ recovery = gen_int(n_recovery, 3);
+ data = gen_userdata(n_data, 4);
+
+ ret_val = xmlSAXParseMemoryWithData(sax, buffer, size, recovery, data);
+ desret_xmlDocPtr(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_const_char_ptr(n_buffer, buffer, 1);
+ des_int(n_size, size, 2);
+ des_int(n_recovery, recovery, 3);
+ des_userdata(n_data, data, 4);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXParseMemoryWithData",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_buffer);
+ printf(" %d", n_size);
+ printf(" %d", n_recovery);
+ printf(" %d", n_data);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7579,8 +8100,45 @@
test_xmlSAXUserParseFile(void) {
int ret = 0;
+ int mem_base;
+ int ret_val;
+ xmlSAXHandlerPtr sax; /* a SAX handler */
+ int n_sax;
+ void * user_data; /* The user data returned on SAX callbacks */
+ int n_user_data;
+ const char * filename; /* a file name */
+ int n_filename;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
+ for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ user_data = gen_userdata(n_user_data, 1);
+ filename = gen_filepath(n_filename, 2);
+ if (sax == &xmlDefaultSAXHandler) user_data = NULL;
+
+ ret_val = xmlSAXUserParseFile(sax, user_data, filename);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_userdata(n_user_data, user_data, 1);
+ des_filepath(n_filename, filename, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXUserParseFile",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_user_data);
+ printf(" %d", n_filename);
+ printf("\n");
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7589,8 +8147,52 @@
test_xmlSAXUserParseMemory(void) {
int ret = 0;
+ int mem_base;
+ int ret_val;
+ xmlSAXHandlerPtr sax; /* a SAX handler */
+ int n_sax;
+ void * user_data; /* The user data returned on SAX callbacks */
+ int n_user_data;
+ const char * buffer; /* an in-memory XML document input */
+ int n_buffer;
+ int size; /* the length of the XML document in bytes */
+ int n_size;
- /* missing type support */
+ for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
+ for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
+ for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
+ for (n_size = 0;n_size < gen_nb_int;n_size++) {
+ mem_base = xmlMemBlocks();
+ sax = gen_xmlSAXHandlerPtr(n_sax, 0);
+ user_data = gen_userdata(n_user_data, 1);
+ buffer = gen_const_char_ptr(n_buffer, 2);
+ size = gen_int(n_size, 3);
+ if (sax == &xmlDefaultSAXHandler) user_data = NULL;
+
+ ret_val = xmlSAXUserParseMemory(sax, user_data, buffer, size);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlSAXHandlerPtr(n_sax, sax, 0);
+ des_userdata(n_user_data, user_data, 1);
+ des_const_char_ptr(n_buffer, buffer, 2);
+ des_int(n_size, size, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlSAXUserParseMemory",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_sax);
+ printf(" %d", n_user_data);
+ printf(" %d", n_buffer);
+ printf(" %d", n_size);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -7760,7 +8362,7 @@
test_parser(void) {
int ret = 0;
- printf("Testing parser : 31 of 69 functions ...\n");
+ printf("Testing parser : 45 of 69 functions ...\n");
ret += test_xmlByteConsumed();
ret += test_xmlClearNodeInfoSeq();
ret += test_xmlClearParserCtxt();
@@ -7903,6 +8505,33 @@
static int
+test_xmlRelaxNGInitTypes(void) {
+ int ret = 0;
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+ int mem_base;
+ int ret_val;
+
+ mem_base = xmlMemBlocks();
+
+ ret_val = xmlRelaxNGInitTypes();
+ desret_int(ret_val);
+ call_tests++;
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlRelaxNGInitTypes",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf("\n");
+ }
+#endif
+
+ function_tests++;
+ return(ret);
+}
+
+
+static int
test_xmlRelaxNGNewDocParserCtxt(void) {
int ret = 0;
@@ -8035,11 +8664,12 @@
test_relaxng(void) {
int ret = 0;
- printf("Testing relaxng : 0 of 21 functions ...\n");
+ printf("Testing relaxng : 1 of 22 functions ...\n");
ret += test_xmlRelaxNGDump();
ret += test_xmlRelaxNGDumpTree();
ret += test_xmlRelaxNGGetParserErrors();
ret += test_xmlRelaxNGGetValidErrors();
+ ret += test_xmlRelaxNGInitTypes();
ret += test_xmlRelaxNGNewDocParserCtxt();
ret += test_xmlRelaxNGNewMemParserCtxt();
ret += test_xmlRelaxNGNewParserCtxt();
@@ -8980,8 +9610,51 @@
test_xmlCreateIntSubset(void) {
int ret = 0;
+ int mem_base;
+ xmlDtdPtr ret_val;
+ xmlDocPtr doc; /* the document pointer */
+ int n_doc;
+ const xmlChar * name; /* the DTD name */
+ int n_name;
+ const xmlChar * ExternalID; /* the external (PUBLIC) ID */
+ int n_ExternalID;
+ const xmlChar * SystemID; /* the system ID */
+ int n_SystemID;
- /* missing type support */
+ for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+ for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
+ for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
+ for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
+ mem_base = xmlMemBlocks();
+ doc = gen_xmlDocPtr(n_doc, 0);
+ name = gen_const_xmlChar_ptr(n_name, 1);
+ ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2);
+ SystemID = gen_const_xmlChar_ptr(n_SystemID, 3);
+
+ ret_val = xmlCreateIntSubset(doc, name, ExternalID, SystemID);
+ desret_xmlDtdPtr(ret_val);
+ call_tests++;
+ des_xmlDocPtr(n_doc, doc, 0);
+ des_const_xmlChar_ptr(n_name, name, 1);
+ des_const_xmlChar_ptr(n_ExternalID, ExternalID, 2);
+ des_const_xmlChar_ptr(n_SystemID, SystemID, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlCreateIntSubset",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_doc);
+ printf(" %d", n_name);
+ printf(" %d", n_ExternalID);
+ printf(" %d", n_SystemID);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -9326,8 +9999,30 @@
test_xmlGetIntSubset(void) {
int ret = 0;
+ int mem_base;
+ xmlDtdPtr ret_val;
+ xmlDocPtr doc; /* the document pointer */
+ int n_doc;
- /* missing type support */
+ for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+ mem_base = xmlMemBlocks();
+ doc = gen_xmlDocPtr(n_doc, 0);
+
+ ret_val = xmlGetIntSubset(doc);
+ desret_xmlDtdPtr(ret_val);
+ call_tests++;
+ des_xmlDocPtr(n_doc, doc, 0);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlGetIntSubset",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_doc);
+ printf("\n");
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -10062,8 +10757,51 @@
test_xmlNewDtd(void) {
int ret = 0;
+ int mem_base;
+ xmlDtdPtr ret_val;
+ xmlDocPtr doc; /* the document pointer */
+ int n_doc;
+ const xmlChar * name; /* the DTD name */
+ int n_name;
+ const xmlChar * ExternalID; /* the external ID */
+ int n_ExternalID;
+ const xmlChar * SystemID; /* the system ID */
+ int n_SystemID;
- /* missing type support */
+ for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+ for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
+ for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
+ for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
+ mem_base = xmlMemBlocks();
+ doc = gen_xmlDocPtr(n_doc, 0);
+ name = gen_const_xmlChar_ptr(n_name, 1);
+ ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2);
+ SystemID = gen_const_xmlChar_ptr(n_SystemID, 3);
+
+ ret_val = xmlNewDtd(doc, name, ExternalID, SystemID);
+ desret_xmlDtdPtr(ret_val);
+ call_tests++;
+ des_xmlDocPtr(n_doc, doc, 0);
+ des_const_xmlChar_ptr(n_name, name, 1);
+ des_const_xmlChar_ptr(n_ExternalID, ExternalID, 2);
+ des_const_xmlChar_ptr(n_SystemID, SystemID, 3);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlNewDtd",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_doc);
+ printf(" %d", n_name);
+ printf(" %d", n_ExternalID);
+ printf(" %d", n_SystemID);
+ printf("\n");
+ }
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -12097,7 +12835,7 @@
test_tree(void) {
int ret = 0;
- printf("Testing tree : 88 of 146 functions ...\n");
+ printf("Testing tree : 91 of 146 functions ...\n");
ret += test_xmlAddChild();
ret += test_xmlAddChildList();
ret += test_xmlAddNextSibling();
@@ -14697,8 +15435,37 @@
test_xmlParserInputBufferGrow(void) {
int ret = 0;
+ int mem_base;
+ int ret_val;
+ xmlParserInputBufferPtr in; /* a buffered parser input */
+ int n_in;
+ int len; /* indicative value of the amount of chars to read */
+ int n_len;
- /* missing type support */
+ for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) {
+ for (n_len = 0;n_len < gen_nb_int;n_len++) {
+ mem_base = xmlMemBlocks();
+ in = gen_xmlParserInputBufferPtr(n_in, 0);
+ len = gen_int(n_len, 1);
+
+ ret_val = xmlParserInputBufferGrow(in, len);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlParserInputBufferPtr(n_in, in, 0);
+ des_int(n_len, len, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlParserInputBufferGrow",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_in);
+ printf(" %d", n_len);
+ printf("\n");
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -14707,8 +15474,44 @@
test_xmlParserInputBufferPush(void) {
int ret = 0;
+ int mem_base;
+ int ret_val;
+ xmlParserInputBufferPtr in; /* a buffered parser input */
+ int n_in;
+ int len; /* the size in bytes of the array. */
+ int n_len;
+ const char * buf; /* an char array */
+ int n_buf;
- /* missing type support */
+ for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) {
+ for (n_len = 0;n_len < gen_nb_int;n_len++) {
+ for (n_buf = 0;n_buf < gen_nb_const_char_ptr;n_buf++) {
+ mem_base = xmlMemBlocks();
+ in = gen_xmlParserInputBufferPtr(n_in, 0);
+ len = gen_int(n_len, 1);
+ buf = gen_const_char_ptr(n_buf, 2);
+
+ ret_val = xmlParserInputBufferPush(in, len, buf);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlParserInputBufferPtr(n_in, in, 0);
+ des_int(n_len, len, 1);
+ des_const_char_ptr(n_buf, buf, 2);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlParserInputBufferPush",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_in);
+ printf(" %d", n_len);
+ printf(" %d", n_buf);
+ printf("\n");
+ }
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -14717,8 +15520,37 @@
test_xmlParserInputBufferRead(void) {
int ret = 0;
+ int mem_base;
+ int ret_val;
+ xmlParserInputBufferPtr in; /* a buffered parser input */
+ int n_in;
+ int len; /* indicative value of the amount of chars to read */
+ int n_len;
- /* missing type support */
+ for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) {
+ for (n_len = 0;n_len < gen_nb_int;n_len++) {
+ mem_base = xmlMemBlocks();
+ in = gen_xmlParserInputBufferPtr(n_in, 0);
+ len = gen_int(n_len, 1);
+
+ ret_val = xmlParserInputBufferRead(in, len);
+ desret_int(ret_val);
+ call_tests++;
+ des_xmlParserInputBufferPtr(n_in, in, 0);
+ des_int(n_len, len, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlParserInputBufferRead",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_in);
+ printf(" %d", n_len);
+ printf("\n");
+ }
+ }
+ }
+
+ function_tests++;
return(ret);
}
@@ -14844,7 +15676,7 @@
test_xmlIO(void) {
int ret = 0;
- printf("Testing xmlIO : 20 of 47 functions ...\n");
+ printf("Testing xmlIO : 23 of 47 functions ...\n");
ret += test_xmlAllocOutputBuffer();
ret += test_xmlAllocParserInputBuffer();
ret += test_xmlCheckFilename();
@@ -15100,8 +15932,39 @@
test_xmlNewTextReader(void) {
int ret = 0;
+#ifdef LIBXML_READER_ENABLED
+ int mem_base;
+ xmlTextReaderPtr ret_val;
+ xmlParserInputBufferPtr input; /* the xmlParserInputBufferPtr used to read data */
+ int n_input;
+ const char * URI; /* the URI information for the source if available */
+ int n_URI;
- /* missing type support */
+ for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
+ for (n_URI = 0;n_URI < gen_nb_filepath;n_URI++) {
+ mem_base = xmlMemBlocks();
+ input = gen_xmlParserInputBufferPtr(n_input, 0);
+ URI = gen_filepath(n_URI, 1);
+
+ ret_val = xmlNewTextReader(input, URI);
+ desret_xmlTextReaderPtr(ret_val);
+ call_tests++;
+ des_xmlParserInputBufferPtr(n_input, input, 0);
+ des_filepath(n_URI, URI, 1);
+ xmlResetLastError();
+ if (mem_base != xmlMemBlocks()) {
+ printf("Leak of %d blocks found in xmlNewTextReader",
+ xmlMemBlocks() - mem_base);
+ ret++;
+ printf(" %d", n_input);
+ printf(" %d", n_URI);
+ printf("\n");
+ }
+ }
+ }
+#endif
+
+ function_tests++;
return(ret);
}
@@ -17527,7 +18390,7 @@
test_xmlreader(void) {
int ret = 0;
- printf("Testing xmlreader : 61 of 78 functions ...\n");
+ printf("Testing xmlreader : 62 of 78 functions ...\n");
ret += test_xmlNewTextReader();
ret += test_xmlNewTextReaderFilename();
ret += test_xmlReaderForDoc();
diff --git a/win32/libxml2.def.src b/win32/libxml2.def.src
index 05850f2..7f35a58 100644
--- a/win32/libxml2.def.src
+++ b/win32/libxml2.def.src
@@ -1380,6 +1380,9 @@
xmlRelaxNGGetValidErrors
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
+xmlRelaxNGInitTypes
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
xmlRelaxNGNewDocParserCtxt
#endif
#ifdef LIBXML_SCHEMAS_ENABLED
diff --git a/xmlIO.c b/xmlIO.c
index a0701e2..2c73f61 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -551,12 +551,12 @@
int
xmlCheckFilename (const char *path)
{
- if (path == NULL)
- return(0);
-
#ifdef HAVE_STAT
struct stat stat_buffer;
+ if (path == NULL)
+ return(0);
+
if (stat(path, &stat_buffer) == -1)
return 0;
@@ -566,6 +566,9 @@
}
#endif
#endif
+ if (path == NULL)
+ return(0);
+
return 1;
}