aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadaf Ebrahimi <sadafebrahimi@google.com>2023-11-13 22:59:58 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-11-13 22:59:58 +0000
commitafbe58284c938bd47d50ba0c8b39ad12f30e9132 (patch)
treed1ca372b2f19a4df64bb742e896aa4888958afa1
parent8d7cefcadd0cf885e4971a533a0b0997b30dac4f (diff)
parent94fc1573cbabb7539023c34a9495375677a81cc2 (diff)
downloadlibxml2-afbe58284c938bd47d50ba0c8b39ad12f30e9132.tar.gz
Merge "Upgrade libxml2 to da703eaaea152f6dd9e871cbe7f0ae46322c583d" into main am: 0b193d89f4 am: 239a126da0 am: 94fc1573cb
Original change: https://android-review.googlesource.com/c/platform/external/libxml2/+/2826595 Change-Id: I0cc615b3f6a94189b1d07a0d7ba645adb13dee64 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt2
-rw-r--r--METADATA6
-rw-r--r--Makefile.am6
-rw-r--r--NEWS226
-rw-r--r--SAX2.c91
-rw-r--r--dict.c23
-rw-r--r--doc/devhelp/libxml2-HTMLparser.html6
-rw-r--r--doc/devhelp/libxml2-SAX.html2
-rw-r--r--doc/devhelp/libxml2-SAX2.html2
-rw-r--r--doc/devhelp/libxml2-dict.html18
-rw-r--r--doc/devhelp/libxml2-encoding.html28
-rw-r--r--doc/devhelp/libxml2-entities.html16
-rw-r--r--doc/devhelp/libxml2-globals.html888
-rw-r--r--doc/devhelp/libxml2-hash.html500
-rw-r--r--doc/devhelp/libxml2-parser.html253
-rw-r--r--doc/devhelp/libxml2-parserInternals.html8
-rw-r--r--doc/devhelp/libxml2-threads.html34
-rw-r--r--doc/devhelp/libxml2-tree.html200
-rw-r--r--doc/devhelp/libxml2-valid.html2
-rw-r--r--doc/devhelp/libxml2-xmlIO.html144
-rw-r--r--doc/devhelp/libxml2-xmlerror.html63
-rw-r--r--doc/devhelp/libxml2-xmlmemory.html55
-rw-r--r--doc/devhelp/libxml2-xmlreader.html22
-rw-r--r--doc/devhelp/libxml2-xmlsave.html68
-rw-r--r--doc/devhelp/libxml2-xmlversion.html29
-rw-r--r--doc/devhelp/libxml2-xpath.html6
-rw-r--r--doc/devhelp/libxml2.devhelp2113
-rw-r--r--doc/examples/examples.xml116
-rw-r--r--doc/examples/index.html96
-rw-r--r--doc/libxml2-api.xml726
-rw-r--r--doc/xmlcatalog.14
-rw-r--r--doc/xmllint.111
-rw-r--r--doc/xmllint.html7
-rw-r--r--encoding.c34
-rw-r--r--error.c2
-rw-r--r--globals.c20
-rw-r--r--hash.c12
-rw-r--r--include/libxml/xmlerror.h4
-rw-r--r--include/libxml/xmlmemory.h2
-rw-r--r--include/private/dict.h6
-rw-r--r--include/private/parser.h2
-rw-r--r--parser.c330
-rw-r--r--parserInternals.c423
-rw-r--r--python/Makefile.am3
-rwxr-xr-xpython/pyproject.toml3
-rwxr-xr-xpython/setup.py.in12
-rw-r--r--python/tests/Makefile.am2
-rw-r--r--result/noent/ns-ent.xml11
-rw-r--r--result/noent/ns-ent.xml.sax241
-rw-r--r--result/ns-ent.xml11
-rw-r--r--result/ns-ent.xml.rde25
-rw-r--r--result/ns-ent.xml.rdr25
-rw-r--r--result/ns-ent.xml.sax45
-rw-r--r--result/ns-ent.xml.sax245
-rw-r--r--runtest.c6
-rw-r--r--runxmlconf.c2
-rw-r--r--test/ns-ent.xml10
-rw-r--r--testapi.c732
-rw-r--r--testchar.c70
-rw-r--r--testdict.c13
-rw-r--r--testlimits.c2
-rw-r--r--testparser.c80
-rw-r--r--testrecurse.c2
-rw-r--r--threads.c5
-rw-r--r--xmlreader.c6
-rw-r--r--xmlschemas.c2
67 files changed, 3015 insertions, 2745 deletions
diff --git a/.gitignore b/.gitignore
index 1696d2e3..1ec700f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@
/testchar
/testdict
/testlimits
+/testparser
/testrecurse
# Tests
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a257ef4d..6553255c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -520,6 +520,7 @@ if(LIBXML2_WITH_TESTS)
testdict
testModule
testlimits
+ testparser
testrecurse
testThreads
)
@@ -543,6 +544,7 @@ if(LIBXML2_WITH_TESTS)
endif()
add_test(NAME testchar COMMAND testchar)
add_test(NAME testdict COMMAND testdict)
+ add_test(NAME testparser COMMAND testparser)
add_test(NAME testrecurse COMMAND testrecurse WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(NAME testThreads COMMAND testThreads WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endif()
diff --git a/METADATA b/METADATA
index c0b25181..cb019ae9 100644
--- a/METADATA
+++ b/METADATA
@@ -17,7 +17,7 @@ third_party {
type: GIT
value: "https://github.com/GNOME/libxml2/"
}
- version: "4f132bcdb300850e94a723a4117cf0847a66d9a7"
+ version: "da703eaaea152f6dd9e871cbe7f0ae46322c583d"
license_type: BY_EXCEPTION_ONLY
license_note: "contains GFDL documentation"
security {
@@ -25,7 +25,7 @@ third_party {
}
last_upgrade_date {
year: 2023
- month: 10
- day: 16
+ month: 11
+ day: 10
}
}
diff --git a/Makefile.am b/Makefile.am
index 1c08480d..0a49d375 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -24,6 +24,7 @@ check_PROGRAMS = \
testchar \
testdict \
testlimits \
+ testparser \
testrecurse
bin_PROGRAMS = xmllint xmlcatalog
@@ -140,6 +141,10 @@ testdict_SOURCES=testdict.c
testdict_DEPENDENCIES = $(DEPS)
testdict_LDADD= $(LDADDS)
+testparser_SOURCES=testparser.c
+testparser_DEPENDENCIES = $(DEPS)
+testparser_LDADD= $(LDADDS)
+
runsuite_SOURCES=runsuite.c
runsuite_DEPENDENCIES = $(DEPS)
runsuite_LDADD= $(LDADDS)
@@ -193,6 +198,7 @@ check-local:
$(CHECKER) ./testapi$(EXEEXT)
$(CHECKER) ./testchar$(EXEEXT)
$(CHECKER) ./testdict$(EXEEXT)
+ $(CHECKER) ./testparser$(EXEEXT)
$(CHECKER) ./testModule$(EXEEXT)
$(CHECKER) ./testThreads$(EXEEXT)
$(CHECKER) ./runxmlconf$(EXEEXT)
diff --git a/NEWS b/NEWS
index 53a84194..1111a6a7 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,10 @@ v2.12.0: not released yet
### Major changes
+Most of the known issues leading to quadratic behavior in the XML parser
+were fixed. Internal hash tables were rewritten to reduce memory
+consumption.
+
Starting with this release, it should be enough to add the --with-legacy
configuration option to provide maximum ABI compatibility. For example,
if a code module was removed from the default configuration, the option
@@ -12,7 +16,9 @@ will add stubs for the removed symbols.
libxml2 will now store global variables in thread-local storage if supported
by the compiler. This avoids allocating the data lazily which can result in
a fatal error condition. A new API function xmlCheckThreadLocalStorage
-was added so the allocation can be checked earlier.
+was added so the allocation can be checked earlier if compiler TLS is not
+supported. To prepare for future improvements, some API functions now expect
+or return a const xmlError struct.
Several cyclic dependencies in public header files were fixed. As a result,
certain headers won't include other headers as before.
@@ -32,6 +38,224 @@ Several bugs in the regex determinism checks were fixed. Invalid XML
Schemas which previous versions erroneously accepted will now be
rejected.
+### Regressions
+
+- threads: Fix --with-thread-alloc
+- xinclude: Fix 'last' pointer in xmlXIncludeCopyNode
+
+### Deprecations
+
+- globals: Deprecate xmlLastError
+- parser: Deprecate global parser options
+- win32: Deprecate old Windows build system
+
+### Bug fixes
+
+- parser: Stop switching to ISO-8859-1 on encoding errors
+- parser: Support encoded external PEs in entity values
+- string: Fix UTF-8 validation in xmlGetUTF8Char
+- SAX2: Allow multiple top-level elements
+- parser: Update line number after coalescing text nodes
+- parser: Check for truncated multi-byte sequences
+
+### Improvements
+
+- error: Make more xmlError structs constant
+- parser: Remove redundant IS_CHAR check in xmlCurrentChar
+- parser: Fix stack handling in xmlParseTryOrFinish
+- parser: Protect against quadratic default attribute expansion
+- parser: Missing checks for disableSAX
+- entities: Make xmlFreeEntity public
+- examples: Don't use sprintf
+- encoding: Suppress -Wcast-align warnings
+- parser: Use hash tables to avoid quadratic behavior
+- parser: Don't skip CR in xmlCurrentChar
+- dict: Rewrite dictionary hash table code
+- hash: Rewrite hash table code
+- malloc-fail: Report malloc failure in xmlFARegExec
+- malloc-fail: Report malloc failure in xmlRegEpxFromParse
+- parser: Simplify xmlStringCurrentChar
+- regexp: Fix status codes and handle invalid UTF-8
+- error: Make xmlGetLastError return a const error
+- html: Fix logic in htmlAutoClose
+- globals: Move globals back to correct header files
+- globals: Use thread-local storage if available
+- globals: Rework global state destruction on Windows
+- globals: Define globals using macros
+- globals: Introduce xmlCheckThreadLocalStorage
+- globals: Make xmlGlobalState private
+- threads: Move library initialization code to threads.c
+- debug: Remove debugging code
+- globals: Move code from threads.c to globals.c
+- parser: Avoid undefined behavior in xmlParseStartTag2
+- schemas: Fix memory leak of annotations in notations
+- dict: Update hash function
+- dict: Use thread-local storage for PRNG state
+- dict: Use xoroshiro64** as PRNG
+- xmllint: Fix error messages
+- parser: Fix detection of null bytes
+- parser: Improve error handling in push parser
+- parser: Don't check inputNr in xmlParseTryOrFinish
+- parser: Remove push parser debugging code
+- tree: Fix copying of DTDs
+- legacy: Add stubs for disabled modules
+- parser: Allow to set maximum amplification factor
+- entities: Don't change doc when encoding entities
+- parser: Never use UTF-8 encoding handler
+- encoding: Remove debugging code
+- malloc-fail: Fix unsigned integer overflow in xmlTextReaderPushData
+- html: Remove encoding hack in htmlCreateFileParserCtxt
+- parser: Decode all data in xmlCharEncInput
+- parser: Stream data when reading from memory
+- parser: Optimize xmlLoadEntityContent
+- parser: Don't overwrite EOF parser state
+- parser: Simplify input pointer updates
+- parser: Don't reinitialize parser input members
+- encoding: Move rawconsumed accounting to xmlCharEncInput
+- parser: Rework encoding detection
+- parser: Always create UTF-8 in xmlParseReference
+- html: Remove some debugging code in htmlParseTryOrFinish
+- malloc-fail: Fix memory leak in xmlCompileAttributeTest
+- parser: Fix potential use-after-free in xmlParseCharDataInternal
+- parser: Recover more input from encoding errors
+- malloc-fail: Handle malloc failures in xmlAddEncodingAlias
+- malloc-fail: Fix null-deref with xmllint --copy
+- xpath: Ignore entity ref nodes when computing node hash
+- malloc-fail: Fix null deref after xmlXIncludeNewRef
+- SAX: Always validate xml:ids
+- Stop using sprintf
+- Fix compiler warning on GCC < 8
+- regexp: Fix determinism checks
+- regexp: Fix checks for eliminated transitions
+- regexp: Simplify xmlFAReduceEpsilonTransitions
+- regexp: Fix cycle check in xmlFAReduceEpsilonTransitions
+- schemas: Fix filename in xmlSchemaValidateFile
+- schemas: Fix line numbers in streaming validation
+- writer: Add error check in xmlTextWriterEndDocument
+- encoding: Stop calling xmlEncodingErr
+- xmlIO: Remove some calls to xmlIOErr
+- parser: Improve handling of encoding and IO errors
+- parser: Move xmlFatalErr to parserInternals.c
+- encoding: Rework error codes
+- .gitignore: Split up and rearrange .gitignore files
+- .gitignore: Add runsuite.log
+- Stop calling xmlMemoryDump
+- examples: Don't call xmlCleanupParser and xmlMemoryDump
+- xpath: Remove remaining references to valueFrame
+
+### Portability
+
+- python: Make it compatible with python3.12 (Daniel Garcia Moreno)
+
+### Build systems
+
+- cmake: Check whether static linking dependencies found in config files
+ (James Le Cuirot)
+- autotools: Make --with-minimum disable lzma support
+- build: Remove some GCC warnings
+- Handle NOCONFIG case when setting locations from CMake target properties
+ (Markus Rickert)
+- cmake: Generate better pkg-config file for SYSROOT builds under CMake
+ (James Le Cuirot)
+- autoconf: Include non-pkg-config dependency flags in the pkg-config file
+ (James Le Cuirot)
+- autoconf: Don't bake build time CFLAGS into pkg-config file (James Le Cuirot)
+- build: Generate better pkg-config files for static-only builds (James
+ Le Cuirot)
+- build: Generate better pkg-config file for SYSROOT builds (James Le Cuirot)
+- autoconf: Allow custom --with-icu configure option
+
+### Tests
+
+- tests: Also test xmlNextChar in testchar.c
+- tests: Start with testparser.c for extra tests
+- fuzz: Raise rss_limit_mb
+- fuzz: Test xmlTextReaderRead after EOF or failure
+- fuzz: Test XML_PARSE_XINCLUDE | XML_PARSE_VALID
+- tests: Handle entities in SAX tests
+- fuzz: Disable XML_PARSE_SAX1 option in xml fuzzer
+- tests: Add more tests for redefined attributes
+- hash: Add hash table tests
+- tests: Add ATTRIBUTE_NO_SANITIZE_INTEGER macro
+- fuzz: Allow to fuzz without push, reader or output modules
+- gitlab-ci: Add a "medium" config build
+- python: Fix tests on MinGW
+- test: Add push parser test with overridden encoding
+- testapi: test_xmlSAXDefaultVersion() leaves xmlSAX2DefaultVersionValue set
+ to 1 with LIBXML_SAX1_ENABLED (David Kilzer)
+- gitlab-ci: Lower _XOPEN_SOURCE value
+- testapi: Don't set http_proxy environment variable
+- test: Add push parser tests for split UTF-8 sequences
+- xinclude: Lower initial table size when fuzzing
+- tests: Test streaming schema validation
+- runtest: Skip element name in schema error messages
+
+### Documentation
+
+- doc: Add notes about runtest to MAINTAINERS.md
+- doc: Don't document internal macros in xmlversion.h
+- doc: Allow 'unsigned' without 'int'
+- doc: Improve documentation of configuration options
+
+
+v2.11.5: Aug 9 2023
+
+### Regressions
+
+- parser: Make xmlSwitchEncoding always skip the BOM
+- autotools: Improve iconv check
+
+### Bug fixes
+
+- valid: Fix c1->parent pointer in xmlCopyDocElementContent
+- encoding: Always call ucnv_convertEx with flush set to false
+
+### Portability
+
+- autotools: fix Python module file ext for cygwin/msys2 (Christoph Reiter)
+
+### Tests
+
+- runtest: Fix compilation without LIBXML_HTML_ENABLED
+
+
+v2.11.4: May 18 2023
+
+Fixes a serious regression.
+
+- parser: Fix regression when push parsing UTF-8 sequences
+
+
+v2.11.3: May 11 2023
+
+Fixes more regressions.
+
+- xinclude: Fix false positives in inclusion loop detection
+- autotools: Fix ICU detection
+- parser: Fix "huge input lookup" error with push parser
+- xpath: Fix build without LIBXML_XPATH_ENABLED
+- hash: Fix possible startup crash with old libxslt versions
+- autoconf: fix iconv library paths (Mike Dalessio)
+
+
+v2.11.2: May 5 2023
+
+Fix regressions.
+
+- threads: Fix startup crash with weak symbol hack
+- win32: Don't depend on removed .def file
+- schemas: Fix memory leak in xmlSchemaValidateStream
+
+
+v2.11.1: Apr 30 2023
+
+Fixes build and ABI issues.
+
+- cmake: Fix va_copy detection (Luca Niccoli)
+- libxml.m4: Fix quoting
+- Link with --undefined-version
+- libxml2.syms: Revert removal of version information
+
v2.11.0: Apr 28 2023
diff --git a/SAX2.c b/SAX2.c
index e20ec886..2505f42a 100644
--- a/SAX2.c
+++ b/SAX2.c
@@ -1855,8 +1855,10 @@ decode:
* The default handling is to convert the attribute into an
* DOM subtree and past it in a new xmlAttr element added to
* the element.
+ *
+ * Returns the new attribute or NULL in case of error.
*/
-static void
+static xmlAttrPtr
xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
const xmlChar * localname,
const xmlChar * prefix,
@@ -1884,42 +1886,28 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
ret = ctxt->freeAttrs;
ctxt->freeAttrs = ret->next;
ctxt->freeAttrsNr--;
- memset(ret, 0, sizeof(xmlAttr));
- ret->type = XML_ATTRIBUTE_NODE;
-
- ret->parent = ctxt->node;
- ret->doc = ctxt->myDoc;
- ret->ns = namespace;
+ } else {
+ ret = xmlMalloc(sizeof(*ret));
+ if (ret == NULL) {
+ xmlSAX2ErrMemory(ctxt, NULL);
+ return(NULL);
+ }
+ }
- if (ctxt->dictNames)
- ret->name = localname;
- else
- ret->name = xmlStrdup(localname);
+ memset(ret, 0, sizeof(xmlAttr));
+ ret->type = XML_ATTRIBUTE_NODE;
- /* link at the end to preserve order, TODO speed up with a last */
- if (ctxt->node->properties == NULL) {
- ctxt->node->properties = ret;
- } else {
- xmlAttrPtr prev = ctxt->node->properties;
+ ret->parent = ctxt->node;
+ ret->doc = ctxt->myDoc;
+ ret->ns = namespace;
- while (prev->next != NULL) prev = prev->next;
- prev->next = ret;
- ret->prev = prev;
- }
+ if (ctxt->dictNames)
+ ret->name = localname;
+ else
+ ret->name = xmlStrdup(localname);
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
- } else {
- if (ctxt->dictNames)
- ret = xmlNewNsPropEatName(ctxt->node, namespace,
- (xmlChar *) localname, NULL);
- else
- ret = xmlNewNsProp(ctxt->node, namespace, localname, NULL);
- if (ret == NULL) {
- xmlErrMemory(ctxt, "xmlSAX2AttributeNs");
- return;
- }
- }
+ if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
+ xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
xmlNodePtr tmp;
@@ -2065,6 +2053,8 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
}
if (dup != NULL)
xmlFree(dup);
+
+ return(ret);
}
/**
@@ -2275,7 +2265,11 @@ xmlSAX2StartElementNs(void *ctx,
* process all the other attributes
*/
if (nb_attributes > 0) {
+ xmlAttrPtr prev = NULL;
+
for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
+ xmlAttrPtr attr = NULL;
+
/*
* Handle the rare case of an undefined attribute prefix
*/
@@ -2286,23 +2280,38 @@ xmlSAX2StartElementNs(void *ctx,
fullname = xmlDictQLookup(ctxt->dict, attributes[j+1],
attributes[j]);
if (fullname != NULL) {
- xmlSAX2AttributeNs(ctxt, fullname, NULL,
- attributes[j+3], attributes[j+4]);
- continue;
+ attr = xmlSAX2AttributeNs(ctxt, fullname, NULL,
+ attributes[j+3],
+ attributes[j+4]);
+ goto have_attr;
}
} else {
lname = xmlBuildQName(attributes[j], attributes[j+1],
NULL, 0);
if (lname != NULL) {
- xmlSAX2AttributeNs(ctxt, lname, NULL,
- attributes[j+3], attributes[j+4]);
+ attr = xmlSAX2AttributeNs(ctxt, lname, NULL,
+ attributes[j+3],
+ attributes[j+4]);
xmlFree(lname);
- continue;
+ goto have_attr;
}
}
}
- xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
- attributes[j+3], attributes[j+4]);
+ attr = xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
+ attributes[j+3], attributes[j+4]);
+have_attr:
+ if (attr == NULL)
+ continue;
+
+ /* link at the end to preserve order */
+ if (prev == NULL) {
+ ctxt->node->properties = attr;
+ } else {
+ prev->next = attr;
+ attr->prev = prev;
+ }
+
+ prev = attr;
}
}
diff --git a/dict.c b/dict.c
index d4ce3835..df49b5b5 100644
--- a/dict.c
+++ b/dict.c
@@ -81,6 +81,8 @@ static xmlMutex xmlDictMutex;
* xmlInitializeDict:
*
* DEPRECATED: Alias for xmlInitParser.
+ *
+ * Returns 0.
*/
int
xmlInitializeDict(void) {
@@ -89,7 +91,7 @@ xmlInitializeDict(void) {
}
/**
- * xmlInitializeDict:
+ * xmlInitDictInternal:
*
* Initialize mutex.
*/
@@ -499,6 +501,10 @@ xmlDictHashQName(unsigned seed, const xmlChar *prefix, const xmlChar *name,
HASH_FINISH(h1, h2);
+ /*
+ * Always set the upper bit of hash values since 0 means an unoccupied
+ * bucket.
+ */
return(h2 | MAX_HASH_SIZE);
}
@@ -508,6 +514,21 @@ xmlDictComputeHash(const xmlDict *dict, const xmlChar *string) {
return(xmlDictHashName(dict->seed, string, SIZE_MAX, &len));
}
+#define HASH_ROL31(x,n) ((x) << (n) | ((x) & 0x7FFFFFFF) >> (31 - (n)))
+
+ATTRIBUTE_NO_SANITIZE_INTEGER
+unsigned
+xmlDictCombineHash(unsigned v1, unsigned v2) {
+ /*
+ * The upper bit of hash values is always set, so we have to operate on
+ * 31-bit hashes here.
+ */
+ v1 ^= v2;
+ v1 += HASH_ROL31(v2, 5);
+
+ return((v1 & 0xFFFFFFFF) | 0x80000000);
+}
+
/**
* xmlDictFindEntry:
* @dict: dict
diff --git a/doc/devhelp/libxml2-HTMLparser.html b/doc/devhelp/libxml2-HTMLparser.html
index a25e40bb..5b7865ff 100644
--- a/doc/devhelp/libxml2-HTMLparser.html
+++ b/doc/devhelp/libxml2-HTMLparser.html
@@ -45,7 +45,7 @@ int <a href="#htmlAutoCloseTag">htmlAutoCloseTag</a> (<a href="libxml2-HTMLpars
<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a> (const char * filename, <br> const char * encoding);
<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreateMemoryParserCtxt">htmlCreateMemoryParserCtxt</a> (const char * buffer, <br> int size);
<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a> (<a href="libxml2-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br> void * user_data, <br> const char * chunk, <br> int size, <br> const char * filename, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
-<a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadDoc">htmlCtxtReadDoc</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * cur, <br> const char * URL, <br> const char * encoding, <br> int options);
+<a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadDoc">htmlCtxtReadDoc</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br> const char * URL, <br> const char * encoding, <br> int options);
<a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadFd">htmlCtxtReadFd</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> int fd, <br> const char * URL, <br> const char * encoding, <br> int options);
<a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadFile">htmlCtxtReadFile</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> const char * filename, <br> const char * encoding, <br> int options);
<a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> <a href="#htmlCtxtReadIO">htmlCtxtReadIO</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> <a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br> <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br> void * ioctx, <br> const char * URL, <br> const char * encoding, <br> int options);
@@ -480,7 +480,7 @@ const <a href="libxml2-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * <a href=
<div class="refsect2" lang="en">
<h3>
<a name="htmlCtxtReadDoc"></a>htmlCtxtReadDoc ()</h3>
-<pre class="programlisting"><a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadDoc (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * cur, <br> const char * URL, <br> const char * encoding, <br> int options)<br>
+<pre class="programlisting"><a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> htmlCtxtReadDoc (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br> const char * URL, <br> const char * encoding, <br> int options)<br>
</pre>
<p>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</p>
<div class="variablelist"><table border="0">
@@ -491,7 +491,7 @@ const <a href="libxml2-HTMLparser.html#htmlElemDesc">htmlElemDesc</a> * <a href=
<td>an HTML parser context</td>
</tr>
<tr>
-<td><span class="term"><i><tt>cur</tt></i>:</span></td>
+<td><span class="term"><i><tt>str</tt></i>:</span></td>
<td>a pointer to a zero terminated string</td>
</tr>
<tr>
diff --git a/doc/devhelp/libxml2-SAX.html b/doc/devhelp/libxml2-SAX.html
index b87a6e63..632836c2 100644
--- a/doc/devhelp/libxml2-SAX.html
+++ b/doc/devhelp/libxml2-SAX.html
@@ -827,7 +827,7 @@ void <a href="#unparsedEntityDecl">unparsedEntityDecl</a> (void * ctx, <br>
<a name="setDocumentLocator"></a>setDocumentLocator ()</h3>
<pre class="programlisting">void setDocumentLocator (void * ctx, <br> <a href="libxml2-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)<br>
</pre>
-<p>Receive the document locator at startup, actually <a href="libxml2-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a> Everything is available on the context, so this is useless in our case. DEPRECATED</p>
+<p>Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case. DEPRECATED</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
diff --git a/doc/devhelp/libxml2-SAX2.html b/doc/devhelp/libxml2-SAX2.html
index b0bb2c79..9d4e2c60 100644
--- a/doc/devhelp/libxml2-SAX2.html
+++ b/doc/devhelp/libxml2-SAX2.html
@@ -750,7 +750,7 @@ int <a href="#xmlSAXVersion">xmlSAXVersion</a> (<a href="libxml2-tree.html#xml
<a name="xmlSAX2SetDocumentLocator"></a>xmlSAX2SetDocumentLocator ()</h3>
<pre class="programlisting">void xmlSAX2SetDocumentLocator (void * ctx, <br> <a href="libxml2-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)<br>
</pre>
-<p>Receive the document locator at startup, actually <a href="libxml2-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a> Everything is available on the context, so this is useless in our case.</p>
+<p>Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
diff --git a/doc/devhelp/libxml2-dict.html b/doc/devhelp/libxml2-dict.html
index 08e914d1..d2a56c10 100644
--- a/doc/devhelp/libxml2-dict.html
+++ b/doc/devhelp/libxml2-dict.html
@@ -110,7 +110,7 @@ The content of this structure is not made public by the API.
<a name="xmlDictExists"></a>xmlDictExists ()</h3>
<pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlDictExists (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> int len)<br>
</pre>
-<p>Check if the @name exists in the dictionary @dict.</p>
+<p>Check if a string exists in the dictionary.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -175,25 +175,25 @@ The content of this structure is not made public by the API.
<a name="xmlDictLookup"></a>xmlDictLookup ()</h3>
<pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlDictLookup (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> int len)<br>
</pre>
-<p>Add the @name to the dictionary @dict if not present.</p>
+<p>Lookup a string and add it to the dictionary if it wasn't found.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
<td><span class="term"><i><tt>dict</tt></i>:</span></td>
-<td>the dictionary</td>
+<td>dictionary</td>
</tr>
<tr>
<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td>string key</td>
</tr>
<tr>
<td><span class="term"><i><tt>len</tt></i>:</span></td>
-<td>the length of the name, if -1 it is recomputed</td>
+<td>length of the key, if -1 it is recomputed</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the internal copy of the name or NULL in case of internal error</td>
+<td>the interned copy of the string or NULL if a memory allocation failed.</td>
</tr>
</tbody>
</table></div>
@@ -229,7 +229,7 @@ The content of this structure is not made public by the API.
<a name="xmlDictQLookup"></a>xmlDictQLookup ()</h3>
<pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlDictQLookup (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
</pre>
-<p>Add the QName @prefix:@name to the hash @dict if not present.</p>
+<p>Lookup the QName @prefix:@name and add it to the dictionary if it wasn't found.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -247,7 +247,7 @@ The content of this structure is not made public by the API.
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the internal copy of the QName or NULL in case of internal error</td>
+<td>the interned copy of the string or NULL if a memory allocation failed.</td>
</tr>
</tbody>
</table></div>
@@ -330,7 +330,7 @@ The content of this structure is not made public by the API.
<col align="left">
<tbody><tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
+<td>0.</td>
</tr></tbody>
</table></div>
</div>
diff --git a/doc/devhelp/libxml2-encoding.html b/doc/devhelp/libxml2-encoding.html
index 2eb52b3d..39782478 100644
--- a/doc/devhelp/libxml2-encoding.html
+++ b/doc/devhelp/libxml2-encoding.html
@@ -22,7 +22,8 @@
<p>Author(s): Daniel Veillard </p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<pre class="synopsis">typedef enum <a href="#xmlCharEncoding">xmlCharEncoding</a>;
+<pre class="synopsis">typedef enum <a href="#xmlCharEncError">xmlCharEncError</a>;
+typedef enum <a href="#xmlCharEncoding">xmlCharEncoding</a>;
typedef struct _xmlCharEncodingHandler <a href="#xmlCharEncodingHandler">xmlCharEncodingHandler</a>;
typedef <a href="libxml2-encoding.html#xmlCharEncodingHandler">xmlCharEncodingHandler</a> * <a href="#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>;
int <a href="#UTF8Toisolat1">UTF8Toisolat1</a> (unsigned char * out, <br> int * outlen, <br> const unsigned char * in, <br> int * inlen);
@@ -54,6 +55,21 @@ void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a
<div class="refsect2" lang="en">
<div class="refsect2" lang="en">
<h3>
+<a name="xmlCharEncError">Enum </a>xmlCharEncError</h3>
+<pre class="programlisting">enum <a href="#xmlCharEncError">xmlCharEncError</a> {
+ <a name="XML_ENC_ERR_MEMORY">XML_ENC_ERR_MEMORY</a> = -5
+ <a name="XML_ENC_ERR_INTERNAL">XML_ENC_ERR_INTERNAL</a> = -4
+ <a name="XML_ENC_ERR_PARTIAL">XML_ENC_ERR_PARTIAL</a> = -3
+ <a name="XML_ENC_ERR_INPUT">XML_ENC_ERR_INPUT</a> = -2
+ <a name="XML_ENC_ERR_SPACE">XML_ENC_ERR_SPACE</a> = -1
+ <a name="XML_ENC_ERR_SUCCESS">XML_ENC_ERR_SUCCESS</a> = 0
+};
+</pre>
+<p></p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlCharEncoding">Enum </a>xmlCharEncoding</h3>
<pre class="programlisting">enum <a href="#xmlCharEncoding">xmlCharEncoding</a> {
<a name="XML_CHAR_ENCODING_ERROR">XML_CHAR_ENCODING_ERROR</a> = -1 /* No char encoding detected */
@@ -202,7 +218,7 @@ void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the number of bytes written if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.</td>
+<td>the number of bytes written or an XML_ENC_ERR code. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.</td>
</tr>
</tbody>
</table></div>
@@ -235,7 +251,7 @@ void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the number of bytes written if success, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.</td>
+<td>the number of bytes written or an XML_ENC_ERR code. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.</td>
</tr>
</tbody>
</table></div>
@@ -310,7 +326,7 @@ void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
+<td>the number of bytes written or an XML_ENC_ERR code.</td>
</tr>
</tbody>
</table></div>
@@ -339,7 +355,7 @@ void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or</td>
+<td>the number of bytes written or an XML_ENC_ERR code.</td>
</tr>
</tbody>
</table></div>
@@ -368,7 +384,7 @@ void <a href="#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or</td>
+<td>the number of bytes written or an XML_ENC_ERR code.</td>
</tr>
</tbody>
</table></div>
diff --git a/doc/devhelp/libxml2-entities.html b/doc/devhelp/libxml2-entities.html
index 2b0ea58d..e21cbcf6 100644
--- a/doc/devhelp/libxml2-entities.html
+++ b/doc/devhelp/libxml2-entities.html
@@ -36,6 +36,7 @@ const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncode
<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input);
<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a> (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input);
void <a href="#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a> (<a href="libxml2-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table);
+void <a href="#xmlFreeEntity">xmlFreeEntity</a> (<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity);
<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetDocEntity">xmlGetDocEntity</a> (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetDtdEntity">xmlGetDtdEntity</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> <a href="#xmlGetParameterEntity">xmlGetParameterEntity</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
@@ -341,6 +342,21 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlFreeEntity"></a>xmlFreeEntity ()</h3>
+<pre class="programlisting">void xmlFreeEntity (<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody><tr>
+<td><span class="term"><i><tt>entity</tt></i>:</span></td>
+<td></td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlGetDocEntity"></a>xmlGetDocEntity ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> xmlGetDocEntity (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
</pre>
diff --git a/doc/devhelp/libxml2-globals.html b/doc/devhelp/libxml2-globals.html
index 0c1eb574..dbd7b3e9 100644
--- a/doc/devhelp/libxml2-globals.html
+++ b/doc/devhelp/libxml2-globals.html
@@ -18,42 +18,16 @@
</tr></table>
<h2><span class="refentrytitle">globals</span></h2>
<p>globals - interface for all global variables of the library</p>
-<p>all the global variables and thread handling for those variables is handled by this module. The bottom of this file is automatically generated by build_glob.py based on the description file global.data </p>
-<p>Author(s): Gary Pennington &lt;Gary.Pennington@uk.sun.com&gt;, Daniel Veillard </p>
+<p>Deprecated, don't use </p>
+<p>Author(s): </p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<pre class="synopsis">typedef struct _xmlGlobalState <a href="#xmlGlobalState">xmlGlobalState</a>;
typedef <a href="libxml2-globals.html#xmlGlobalState">xmlGlobalState</a> * <a href="#xmlGlobalStatePtr">xmlGlobalStatePtr</a>;
void <a href="#xmlCleanupGlobals">xmlCleanupGlobals</a> (void);
-<a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> <a href="#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a> (<a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func);
-typedef void <a href="#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
+<a href="libxml2-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> <a href="#xmlGetGlobalState">xmlGetGlobalState</a> (void);
void <a href="#xmlInitGlobals">xmlInitGlobals</a> (void);
void <a href="#xmlInitializeGlobalState">xmlInitializeGlobalState</a> (<a href="libxml2-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> gs);
-<a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> <a href="#xmlOutputBufferCreateFilenameDefault">xmlOutputBufferCreateFilenameDefault</a> (<a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func);
-typedef <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br> int compression);
-<a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> <a href="#xmlParserInputBufferCreateFilenameDefault">xmlParserInputBufferCreateFilenameDefault</a> (<a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func);
-typedef <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
-<a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> <a href="#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a> (<a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func);
-typedef void <a href="#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
-<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> <a href="#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a> (<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> v);
-int <a href="#xmlThrDefDefaultBufferSize">xmlThrDefDefaultBufferSize</a> (int v);
-<a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> <a href="#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a> (<a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func);
-int <a href="#xmlThrDefDoValidityCheckingDefaultValue">xmlThrDefDoValidityCheckingDefaultValue</a> (int v);
-int <a href="#xmlThrDefGetWarningsDefaultValue">xmlThrDefGetWarningsDefaultValue</a> (int v);
-int <a href="#xmlThrDefIndentTreeOutput">xmlThrDefIndentTreeOutput</a> (int v);
-int <a href="#xmlThrDefKeepBlanksDefaultValue">xmlThrDefKeepBlanksDefaultValue</a> (int v);
-int <a href="#xmlThrDefLineNumbersDefaultValue">xmlThrDefLineNumbersDefaultValue</a> (int v);
-int <a href="#xmlThrDefLoadExtDtdDefaultValue">xmlThrDefLoadExtDtdDefaultValue</a> (int v);
-<a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> <a href="#xmlThrDefOutputBufferCreateFilenameDefault">xmlThrDefOutputBufferCreateFilenameDefault</a> (<a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func);
-int <a href="#xmlThrDefParserDebugEntities">xmlThrDefParserDebugEntities</a> (int v);
-<a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> <a href="#xmlThrDefParserInputBufferCreateFilenameDefault">xmlThrDefParserInputBufferCreateFilenameDefault</a> (<a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func);
-int <a href="#xmlThrDefPedanticParserDefaultValue">xmlThrDefPedanticParserDefaultValue</a> (int v);
-<a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> <a href="#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a> (<a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func);
-int <a href="#xmlThrDefSaveNoEmptyTags">xmlThrDefSaveNoEmptyTags</a> (int v);
-void <a href="#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a> (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler);
-void <a href="#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a> (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler);
-int <a href="#xmlThrDefSubstituteEntitiesDefaultValue">xmlThrDefSubstituteEntitiesDefaultValue</a> (int v);
-const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a> (const char * v);
</pre>
</div>
<div class="refsect1" lang="en"><h2>Description</h2></div>
@@ -64,39 +38,7 @@ const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a>
<h3>
<a name="xmlGlobalState">Structure </a>xmlGlobalState</h3>
<pre class="programlisting">struct _xmlGlobalState {
- const char * xmlParserVersion
- <a href="libxml2-tree.html#xmlSAXLocator">xmlSAXLocator</a> xmlDefaultSAXLocator
- <a href="libxml2-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> xmlDefaultSAXHandler
- <a href="libxml2-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> docbDefaultSAXHandler : unused
- <a href="libxml2-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> htmlDefaultSAXHandler
- <a href="libxml2-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> xmlFree
- <a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMalloc
- <a href="libxml2-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> xmlMemStrdup
- <a href="libxml2-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> xmlRealloc
- <a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> xmlGenericError
- <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> xmlStructuredError
- void * xmlGenericErrorContext
- int oldXMLWDcompatibility
- <a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlBufferAllocScheme
- int xmlDefaultBufferSize
- int xmlSubstituteEntitiesDefaultValue
- int xmlDoValidityCheckingDefaultValue
- int xmlGetWarningsDefaultValue
- int xmlKeepBlanksDefaultValue
- int xmlLineNumbersDefaultValue
- int xmlLoadExtDtdDefaultValue
- int xmlParserDebugEntities
- int xmlPedanticParserDefaultValue
- int xmlSaveNoEmptyTags
- int xmlIndentTreeOutput
- const char * xmlTreeIndentString
- <a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlRegisterNodeDefaultValue
- <a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlDeregisterNodeDefaultValue
- <a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMallocAtomic
- <a href="libxml2-xmlerror.html#xmlError">xmlError</a> xmlLastError
- <a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> xmlParserInputBufferCreateFilenameValue
- <a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> xmlOutputBufferCreateFilenameValue
- void * xmlStructuredErrorContext
+The content of this structure is not made public by the API.
} xmlGlobalState;
</pre>
<p></p>
@@ -112,346 +54,6 @@ const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a>
<hr>
<div class="refsect2" lang="en">
<h3>
-<a name="xmlDeregisterNodeFunc"></a>Function type xmlDeregisterNodeFunc</h3>
-<pre class="programlisting">void xmlDeregisterNodeFunc (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br>
-</pre>
-<p>Signature for the deregistration callback of a discarded node</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody><tr>
-<td><span class="term"><i><tt>node</tt></i>:</span></td>
-<td>the current node</td>
-</tr></tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlOutputBufferCreateFilenameFunc"></a>Function type xmlOutputBufferCreateFilenameFunc</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateFilenameFunc (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br> int compression)<br>
-</pre>
-<p>Signature for the function doing the lookup for a suitable output method corresponding to an URI.</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>URI</tt></i>:</span></td>
-<td>the URI to write to</td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>encoder</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>compression</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the new <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> in case of success or NULL if no method was found.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlParserInputBufferCreateFilenameFunc"></a>Function type xmlParserInputBufferCreateFilenameFunc</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateFilenameFunc (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br>
-</pre>
-<p>Signature for the function doing the lookup for a suitable input method corresponding to an URI.</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>URI</tt></i>:</span></td>
-<td>the URI to read from</td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>enc</tt></i>:</span></td>
-<td>the requested source encoding</td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the new <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in case of success or NULL if no method was found.</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlRegisterNodeFunc"></a>Function type xmlRegisterNodeFunc</h3>
-<pre class="programlisting">void xmlRegisterNodeFunc (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br>
-</pre>
-<p>Signature for the registration callback of a created node</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody><tr>
-<td><span class="term"><i><tt>node</tt></i>:</span></td>
-<td>the current node</td>
-</tr></tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="htmlDefaultSAXHandler">Variable </a>htmlDefaultSAXHandler</h3>
-<pre class="programlisting"><a href="libxml2-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> htmlDefaultSAXHandler;
-</pre>
-<p>DEPRECATED: This handler is unused and will be removed from future versions. Default old SAX v1 handler for HTML, builds the DOM tree</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="oldXMLWDcompatibility">Variable </a>oldXMLWDcompatibility</h3>
-<pre class="programlisting">int oldXMLWDcompatibility;
-</pre>
-<p>Global setting, DEPRECATED.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlBufferAllocScheme">Variable </a>xmlBufferAllocScheme</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlBufferAllocScheme;
-</pre>
-<p>DEPRECATED: Don't use. Global setting, default allocation policy for buffers, default is <a href="libxml2-tree.html#XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a></p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlDefaultBufferSize">Variable </a>xmlDefaultBufferSize</h3>
-<pre class="programlisting">int xmlDefaultBufferSize;
-</pre>
-<p>DEPRECATED: Don't use. Global setting, default buffer size. Default value is <a href="libxml2-tree.html#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a></p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlDefaultSAXHandler">Variable </a>xmlDefaultSAXHandler</h3>
-<pre class="programlisting"><a href="libxml2-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> xmlDefaultSAXHandler;
-</pre>
-<p>DEPRECATED: This handler is unused and will be removed from future versions. Default SAX version1 handler for XML, builds the DOM tree</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlDefaultSAXLocator">Variable </a>xmlDefaultSAXLocator</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlSAXLocator">xmlSAXLocator</a> xmlDefaultSAXLocator;
-</pre>
-<p>DEPRECATED: Don't use The default SAX Locator { getPublicId, getSystemId, getLineNumber, getColumnNumber}</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlDeregisterNodeDefaultValue">Variable </a>xmlDeregisterNodeDefaultValue</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlDeregisterNodeDefaultValue;
-</pre>
-<p>DEPRECATED: Don't use</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlDoValidityCheckingDefaultValue">Variable </a>xmlDoValidityCheckingDefaultValue</h3>
-<pre class="programlisting">int xmlDoValidityCheckingDefaultValue;
-</pre>
-<p>DEPRECATED: Use the modern options API with <a href="libxml2-parser.html#XML_PARSE_DTDVALID">XML_PARSE_DTDVALID</a>. Global setting, indicate that the parser should work in validating mode. Disabled by default.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlFree">Variable </a>xmlFree</h3>
-<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> xmlFree;
-</pre>
-<p>@mem: an already allocated block of memory The variable holding the libxml free() implementation</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlGenericError">Variable </a>xmlGenericError</h3>
-<pre class="programlisting"><a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> xmlGenericError;
-</pre>
-<p>Global setting: function used for generic error callbacks</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlGenericErrorContext">Variable </a>xmlGenericErrorContext</h3>
-<pre class="programlisting">void * xmlGenericErrorContext;
-</pre>
-<p>Global setting passed to generic error callbacks</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlGetWarningsDefaultValue">Variable </a>xmlGetWarningsDefaultValue</h3>
-<pre class="programlisting">int xmlGetWarningsDefaultValue;
-</pre>
-<p>DEPRECATED: Don't use Global setting, indicate that the DTD validation should provide warnings. Activated by default.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlIndentTreeOutput">Variable </a>xmlIndentTreeOutput</h3>
-<pre class="programlisting">int xmlIndentTreeOutput;
-</pre>
-<p>Global setting, asking the serializer to indent the output tree by default Enabled by default</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlKeepBlanksDefaultValue">Variable </a>xmlKeepBlanksDefaultValue</h3>
-<pre class="programlisting">int xmlKeepBlanksDefaultValue;
-</pre>
-<p>DEPRECATED: Use the modern options API with <a href="libxml2-parser.html#XML_PARSE_NOBLANKS">XML_PARSE_NOBLANKS</a>. Global setting, indicate that the parser should keep all blanks nodes found in the content Activated by default, this is actually needed to have the parser conformant to the XML Recommendation, however the option is kept for some applications since this was libxml1 default behaviour.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlLastError">Variable </a>xmlLastError</h3>
-<pre class="programlisting"><a href="libxml2-xmlerror.html#xmlError">xmlError</a> xmlLastError;
-</pre>
-<p></p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlLineNumbersDefaultValue">Variable </a>xmlLineNumbersDefaultValue</h3>
-<pre class="programlisting">int xmlLineNumbersDefaultValue;
-</pre>
-<p>DEPRECATED: The modern options API always enables line numbers. Global setting, indicate that the parser should store the line number in the content field of elements in the DOM tree. Disabled by default since this may not be safe for old classes of application.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlLoadExtDtdDefaultValue">Variable </a>xmlLoadExtDtdDefaultValue</h3>
-<pre class="programlisting">int xmlLoadExtDtdDefaultValue;
-</pre>
-<p>DEPRECATED: Use the modern options API with <a href="libxml2-parser.html#XML_PARSE_DTDLOAD">XML_PARSE_DTDLOAD</a>. Global setting, indicate that the parser should load DTD while not validating. Disabled by default.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlMalloc">Variable </a>xmlMalloc</h3>
-<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMalloc;
-</pre>
-<p>@size: the size requested in bytes The variable holding the libxml malloc() implementation Returns a pointer to the newly allocated block or NULL in case of error</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlMallocAtomic">Variable </a>xmlMallocAtomic</h3>
-<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMallocAtomic;
-</pre>
-<p>@size: the size requested in bytes The variable holding the libxml malloc() implementation for atomic data (i.e. blocks not containing pointers), useful when using a garbage collecting allocator. Returns a pointer to the newly allocated block or NULL in case of error</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlMemStrdup">Variable </a>xmlMemStrdup</h3>
-<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> xmlMemStrdup;
-</pre>
-<p>@str: a zero terminated string The variable holding the libxml strdup() implementation Returns the copy of the string or NULL in case of error</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlOutputBufferCreateFilenameValue">Variable </a>xmlOutputBufferCreateFilenameValue</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> xmlOutputBufferCreateFilenameValue;
-</pre>
-<p>DEPRECATED: Don't use</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlParserDebugEntities">Variable </a>xmlParserDebugEntities</h3>
-<pre class="programlisting">int xmlParserDebugEntities;
-</pre>
-<p>DEPRECATED: Don't use Global setting, asking the parser to print out debugging information. while handling entities. Disabled by default</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlParserInputBufferCreateFilenameValue">Variable </a>xmlParserInputBufferCreateFilenameValue</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> xmlParserInputBufferCreateFilenameValue;
-</pre>
-<p>DEPRECATED: Don't use</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlParserVersion">Variable </a>xmlParserVersion</h3>
-<pre class="programlisting">const char * xmlParserVersion;
-</pre>
-<p>Constant string describing the internal version of the library</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlPedanticParserDefaultValue">Variable </a>xmlPedanticParserDefaultValue</h3>
-<pre class="programlisting">int xmlPedanticParserDefaultValue;
-</pre>
-<p>DEPRECATED: Use the modern options API with <a href="libxml2-parser.html#XML_PARSE_PEDANTIC">XML_PARSE_PEDANTIC</a>. Global setting, indicate that the parser be pedantic Disabled by default.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlRealloc">Variable </a>xmlRealloc</h3>
-<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> xmlRealloc;
-</pre>
-<p>@mem: an already allocated block of memory @size: the new size requested in bytes The variable holding the libxml realloc() implementation Returns a pointer to the newly reallocated block or NULL in case of error</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlRegisterNodeDefaultValue">Variable </a>xmlRegisterNodeDefaultValue</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlRegisterNodeDefaultValue;
-</pre>
-<p>DEPRECATED: Don't use</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlSaveNoEmptyTags">Variable </a>xmlSaveNoEmptyTags</h3>
-<pre class="programlisting">int xmlSaveNoEmptyTags;
-</pre>
-<p>Global setting, asking the serializer to not output empty tags as &lt;empty/&gt; but &lt;empty&gt;&lt;/empty&gt;. those two forms are indistinguishable once parsed. Disabled by default</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlStructuredError">Variable </a>xmlStructuredError</h3>
-<pre class="programlisting"><a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> xmlStructuredError;
-</pre>
-<p>Global setting: function used for structured error callbacks</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlStructuredErrorContext">Variable </a>xmlStructuredErrorContext</h3>
-<pre class="programlisting">void * xmlStructuredErrorContext;
-</pre>
-<p>Global setting passed to structured error callbacks</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlSubstituteEntitiesDefaultValue">Variable </a>xmlSubstituteEntitiesDefaultValue</h3>
-<pre class="programlisting">int xmlSubstituteEntitiesDefaultValue;
-</pre>
-<p>DEPRECATED: Use the modern options API with <a href="libxml2-parser.html#XML_PARSE_NOENT">XML_PARSE_NOENT</a>. Global setting, indicate that the parser should not generate entity references but replace them with the actual content of the entity Disabled by default, this should be activated when using XPath since the XPath data model requires entities replacement and the XPath engine does not handle entities references transparently.</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlTreeIndentString">Variable </a>xmlTreeIndentString</h3>
-<pre class="programlisting">const char * xmlTreeIndentString;
-</pre>
-<p>The string used to do one-level indent. By default is equal to " " (two spaces)</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
<a name="xmlCleanupGlobals"></a>xmlCleanupGlobals ()</h3>
<pre class="programlisting">void xmlCleanupGlobals (void)<br>
</pre>
@@ -460,22 +62,16 @@ const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a>
<hr>
<div class="refsect2" lang="en">
<h3>
-<a name="xmlDeregisterNodeDefault"></a>xmlDeregisterNodeDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlDeregisterNodeDefault (<a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)<br>
+<a name="xmlGetGlobalState"></a>xmlGetGlobalState ()</h3>
+<pre class="programlisting"><a href="libxml2-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> xmlGetGlobalState (void)<br>
</pre>
-<p>Registers a callback for node destruction</p>
+<p>DEPRECATED</p>
<div class="variablelist"><table border="0">
<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td>function pointer to the new DeregisterNodeFunc</td>
-</tr>
-<tr>
+<tbody><tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the previous value of the deregistration function</td>
-</tr>
-</tbody>
+<td>NULL.</td>
+</tr></tbody>
</table></div>
</div>
<hr>
@@ -492,7 +88,7 @@ const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a>
<a name="xmlInitializeGlobalState"></a>xmlInitializeGlobalState ()</h3>
<pre class="programlisting">void xmlInitializeGlobalState (<a href="libxml2-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> gs)<br>
</pre>
-<p>xmlInitializeGlobalState() initialize a global state with all the default values of the library.</p>
+<p>DEPRECATED: No-op.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody><tr>
@@ -502,468 +98,6 @@ const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a>
</table></div>
</div>
<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlOutputBufferCreateFilenameDefault"></a>xmlOutputBufferCreateFilenameDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> xmlOutputBufferCreateFilenameDefault (<a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func)<br>
-</pre>
-<p>Registers a callback for URI output file handling</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td>function pointer to the new OutputBufferCreateFilenameFunc</td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the old value of the registration function</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlParserInputBufferCreateFilenameDefault"></a>xmlParserInputBufferCreateFilenameDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> xmlParserInputBufferCreateFilenameDefault (<a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func)<br>
-</pre>
-<p>Registers a callback for URI input file handling</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td>function pointer to the new ParserInputBufferCreateFilenameFunc</td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the old value of the registration function</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlRegisterNodeDefault"></a>xmlRegisterNodeDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlRegisterNodeDefault (<a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)<br>
-</pre>
-<p>Registers a callback for node creation</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td>function pointer to the new RegisterNodeFunc</td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the old value of the registration function</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefBufferAllocScheme"></a>xmlThrDefBufferAllocScheme ()</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlThrDefBufferAllocScheme (<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefDefaultBufferSize"></a>xmlThrDefDefaultBufferSize ()</h3>
-<pre class="programlisting">int xmlThrDefDefaultBufferSize (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefDeregisterNodeDefault"></a>xmlThrDefDeregisterNodeDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlThrDefDeregisterNodeDefault (<a href="libxml2-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefDoValidityCheckingDefaultValue"></a>xmlThrDefDoValidityCheckingDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefDoValidityCheckingDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefGetWarningsDefaultValue"></a>xmlThrDefGetWarningsDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefGetWarningsDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefIndentTreeOutput"></a>xmlThrDefIndentTreeOutput ()</h3>
-<pre class="programlisting">int xmlThrDefIndentTreeOutput (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefKeepBlanksDefaultValue"></a>xmlThrDefKeepBlanksDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefKeepBlanksDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefLineNumbersDefaultValue"></a>xmlThrDefLineNumbersDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefLineNumbersDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefLoadExtDtdDefaultValue"></a>xmlThrDefLoadExtDtdDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefLoadExtDtdDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefOutputBufferCreateFilenameDefault"></a>xmlThrDefOutputBufferCreateFilenameDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> xmlThrDefOutputBufferCreateFilenameDefault (<a href="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefParserDebugEntities"></a>xmlThrDefParserDebugEntities ()</h3>
-<pre class="programlisting">int xmlThrDefParserDebugEntities (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefParserInputBufferCreateFilenameDefault"></a>xmlThrDefParserInputBufferCreateFilenameDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> xmlThrDefParserInputBufferCreateFilenameDefault (<a href="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefPedanticParserDefaultValue"></a>xmlThrDefPedanticParserDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefPedanticParserDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefRegisterNodeDefault"></a>xmlThrDefRegisterNodeDefault ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlThrDefRegisterNodeDefault (<a href="libxml2-globals.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>func</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefSaveNoEmptyTags"></a>xmlThrDefSaveNoEmptyTags ()</h3>
-<pre class="programlisting">int xmlThrDefSaveNoEmptyTags (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefSetGenericErrorFunc"></a>xmlThrDefSetGenericErrorFunc ()</h3>
-<pre class="programlisting">void xmlThrDefSetGenericErrorFunc (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>handler</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefSetStructuredErrorFunc"></a>xmlThrDefSetStructuredErrorFunc ()</h3>
-<pre class="programlisting">void xmlThrDefSetStructuredErrorFunc (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>handler</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefSubstituteEntitiesDefaultValue"></a>xmlThrDefSubstituteEntitiesDefaultValue ()</h3>
-<pre class="programlisting">int xmlThrDefSubstituteEntitiesDefaultValue (int v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="xmlThrDefTreeIndentString"></a>xmlThrDefTreeIndentString ()</h3>
-<pre class="programlisting">const char * xmlThrDefTreeIndentString (const char * v)<br>
-</pre>
-<p></p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody>
-<tr>
-<td><span class="term"><i><tt>v</tt></i>:</span></td>
-<td></td>
-</tr>
-<tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
</div>
</div>
</body>
diff --git a/doc/devhelp/libxml2-hash.html b/doc/devhelp/libxml2-hash.html
index 2618680f..4452739e 100644
--- a/doc/devhelp/libxml2-hash.html
+++ b/doc/devhelp/libxml2-hash.html
@@ -25,35 +25,35 @@
<pre class="synopsis">#define <a href="#XML_CAST_FPTR">XML_CAST_FPTR</a>(fptr);
typedef struct _xmlHashTable <a href="#xmlHashTable">xmlHashTable</a>;
typedef <a href="libxml2-hash.html#xmlHashTable">xmlHashTable</a> * <a href="#xmlHashTablePtr">xmlHashTablePtr</a>;
-int <a href="#xmlHashAddEntry">xmlHashAddEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata);
-int <a href="#xmlHashAddEntry2">xmlHashAddEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata);
-int <a href="#xmlHashAddEntry3">xmlHashAddEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> void * userdata);
+int <a href="#xmlHashAddEntry">xmlHashAddEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> void * payload);
+int <a href="#xmlHashAddEntry2">xmlHashAddEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> void * payload);
+int <a href="#xmlHashAddEntry3">xmlHashAddEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> void * payload);
typedef void * <a href="#xmlHashCopier">xmlHashCopier</a> (void * payload, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
-<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCopy">xmlHashCopy</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> f);
+<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCopy">xmlHashCopy</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> copy);
<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCreate">xmlHashCreate</a> (int size);
<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> <a href="#xmlHashCreateDict">xmlHashCreateDict</a> (int size, <br> <a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict);
typedef void <a href="#xmlHashDeallocator">xmlHashDeallocator</a> (void * payload, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
-void <a href="#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a> (void * entry, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
-void <a href="#xmlHashFree">xmlHashFree</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-void * <a href="#xmlHashLookup">xmlHashLookup</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
-void * <a href="#xmlHashLookup2">xmlHashLookup2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2);
-void * <a href="#xmlHashLookup3">xmlHashLookup3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
-void * <a href="#xmlHashQLookup">xmlHashQLookup</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
-void * <a href="#xmlHashQLookup2">xmlHashQLookup2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2);
-void * <a href="#xmlHashQLookup3">xmlHashQLookup3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
-int <a href="#xmlHashRemoveEntry">xmlHashRemoveEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-int <a href="#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-int <a href="#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-void <a href="#xmlHashScan">xmlHashScan</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data);
-void <a href="#xmlHashScan3">xmlHashScan3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data);
-void <a href="#xmlHashScanFull">xmlHashScanFull</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data);
-void <a href="#xmlHashScanFull3">xmlHashScanFull3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data);
+void <a href="#xmlHashDefaultDeallocator">xmlHashDefaultDeallocator</a> (void * entry, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key);
+void <a href="#xmlHashFree">xmlHashFree</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
+void * <a href="#xmlHashLookup">xmlHashLookup</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key);
+void * <a href="#xmlHashLookup2">xmlHashLookup2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2);
+void * <a href="#xmlHashLookup3">xmlHashLookup3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3);
+void * <a href="#xmlHashQLookup">xmlHashQLookup</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+void * <a href="#xmlHashQLookup2">xmlHashQLookup2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2);
+void * <a href="#xmlHashQLookup3">xmlHashQLookup3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
+int <a href="#xmlHashRemoveEntry">xmlHashRemoveEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
+int <a href="#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
+int <a href="#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
+void <a href="#xmlHashScan">xmlHashScan</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br> void * data);
+void <a href="#xmlHashScan3">xmlHashScan3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br> void * data);
+void <a href="#xmlHashScanFull">xmlHashScanFull</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br> void * data);
+void <a href="#xmlHashScanFull3">xmlHashScanFull3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br> void * data);
typedef void <a href="#xmlHashScanner">xmlHashScanner</a> (void * payload, <br> void * data, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
typedef void <a href="#xmlHashScannerFull">xmlHashScannerFull</a> (void * payload, <br> void * data, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3);
-int <a href="#xmlHashSize">xmlHashSize</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table);
-int <a href="#xmlHashUpdateEntry">xmlHashUpdateEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-int <a href="#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
-int <a href="#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f);
+int <a href="#xmlHashSize">xmlHashSize</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash);
+int <a href="#xmlHashUpdateEntry">xmlHashUpdateEntry</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> void * payload, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
+int <a href="#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> void * payload, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
+int <a href="#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a> (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> void * payload, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc);
</pre>
</div>
<div class="refsect1" lang="en"><h2>Description</h2></div>
@@ -200,27 +200,27 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashAddEntry"></a>xmlHashAddEntry ()</h3>
-<pre class="programlisting">int xmlHashAddEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata)<br>
+<pre class="programlisting">int xmlHashAddEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> void * payload)<br>
</pre>
-<p>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.</p>
+<p>Add a hash table entry. If an entry with this key already exists, payload will not be updated and -1 is returned. This return value can't be distinguished from out-of-memory errors, so this function should be used with care.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>userdata</tt></i>:</span></td>
-<td>a pointer to the userdata</td>
+<td><span class="term"><i><tt>payload</tt></i>:</span></td>
+<td>pointer to the payload</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 the addition succeeded and -1 in case of error.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -229,31 +229,31 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashAddEntry2"></a>xmlHashAddEntry2 ()</h3>
-<pre class="programlisting">int xmlHashAddEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata)<br>
+<pre class="programlisting">int xmlHashAddEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> void * payload)<br>
</pre>
-<p>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.</p>
+<p>Add a hash table entry with two strings as key. See <a href="libxml2-hash.html#xmlHashAddEntry">xmlHashAddEntry</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>userdata</tt></i>:</span></td>
-<td>a pointer to the userdata</td>
+<td><span class="term"><i><tt>payload</tt></i>:</span></td>
+<td>pointer to the payload</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 the addition succeeded and -1 in case of error.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -262,35 +262,35 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashAddEntry3"></a>xmlHashAddEntry3 ()</h3>
-<pre class="programlisting">int xmlHashAddEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> void * userdata)<br>
+<pre class="programlisting">int xmlHashAddEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> void * payload)<br>
</pre>
-<p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.</p>
+<p>Add a hash table entry with three strings as key. See <a href="libxml2-hash.html#xmlHashAddEntry">xmlHashAddEntry</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata</td>
+<td><span class="term"><i><tt>key3</tt></i>:</span></td>
+<td>third string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>userdata</tt></i>:</span></td>
-<td>a pointer to the userdata</td>
+<td><span class="term"><i><tt>payload</tt></i>:</span></td>
+<td>pointer to the payload</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 the addition succeeded and -1 in case of error.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -299,23 +299,23 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashCopy"></a>xmlHashCopy ()</h3>
-<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCopy (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> f)<br>
+<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCopy (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashCopier">xmlHashCopier</a> copy)<br>
</pre>
-<p>Scan the hash @table and applied @f to each value.</p>
+<p>Copy the hash @table using @copy to copy payloads.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the copier function for items in the hash</td>
+<td><span class="term"><i><tt>copy</tt></i>:</span></td>
+<td>copier function for items in the hash</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the new table or NULL in case of error.</td>
+<td>the new table or NULL if a memory allocation failed.</td>
</tr>
</tbody>
</table></div>
@@ -326,17 +326,17 @@ The content of this structure is not made public by the API.
<a name="xmlHashCreate"></a>xmlHashCreate ()</h3>
<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCreate (int size)<br>
</pre>
-<p>Create a new <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a>.</p>
+<p>Create a new hash table. Set size to zero if the number of entries can't be estimated.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
<td><span class="term"><i><tt>size</tt></i>:</span></td>
-<td>the size of the hash table</td>
+<td>initial size of the hash table</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the newly created object, or NULL if an error occurred.</td>
+<td>the newly created object, or NULL if a memory allocation failed.</td>
</tr>
</tbody>
</table></div>
@@ -347,7 +347,7 @@ The content of this structure is not made public by the API.
<a name="xmlHashCreateDict"></a>xmlHashCreateDict ()</h3>
<pre class="programlisting"><a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> xmlHashCreateDict (int size, <br> <a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br>
</pre>
-<p>Create a new <a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> which will use @dict as the internal dictionary</p>
+<p>Create a new hash table backed by a dictionary. This can reduce resource usage considerably if most keys passed to API functions originate from this dictionary.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -361,7 +361,7 @@ The content of this structure is not made public by the API.
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the newly created object, or NULL if an error occurred.</td>
+<td>the newly created object, or NULL if a memory allocation failed.</td>
</tr>
</tbody>
</table></div>
@@ -370,19 +370,19 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashDefaultDeallocator"></a>xmlHashDefaultDeallocator ()</h3>
-<pre class="programlisting">void xmlHashDefaultDeallocator (void * entry, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
+<pre class="programlisting">void xmlHashDefaultDeallocator (void * entry, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key)<br>
</pre>
-<p>Free a hash table entry with <a href="libxml2-globals.html#xmlFree">xmlFree</a>.</p>
+<p>Free a hash table entry with <a href="libxml2-xmlmemory.html#xmlFree">xmlFree</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
<td><span class="term"><i><tt>entry</tt></i>:</span></td>
-<td>the hash table entry</td>
+<td>hash table entry</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the entry's name</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>the entry's string key</td>
</tr>
</tbody>
</table></div>
@@ -391,19 +391,19 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashFree"></a>xmlHashFree ()</h3>
-<pre class="programlisting">void xmlHashFree (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">void xmlHashFree (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</p>
+<p>Free the hash and its contents. The payload is deallocated with @dealloc if provided.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for items in the hash</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function or NULL</td>
</tr>
</tbody>
</table></div>
@@ -412,23 +412,23 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashLookup"></a>xmlHashLookup ()</h3>
-<pre class="programlisting">void * xmlHashLookup (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
+<pre class="programlisting">void * xmlHashLookup (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key)<br>
</pre>
-<p>Find the userdata specified by the @name.</p>
+<p>Find the entry specified by @key.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>string key</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the pointer to the userdata</td>
+<td>a pointer to the payload or NULL if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -437,27 +437,27 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashLookup2"></a>xmlHashLookup2 ()</h3>
-<pre class="programlisting">void * xmlHashLookup2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2)<br>
+<pre class="programlisting">void * xmlHashLookup2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2)<br>
</pre>
-<p>Find the userdata specified by the (@name, @name2) tuple.</p>
+<p>Find the payload specified by the (@key, @key2) tuple.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the pointer to the userdata</td>
+<td>a pointer to the payload or NULL if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -466,31 +466,31 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashLookup3"></a>xmlHashLookup3 ()</h3>
-<pre class="programlisting">void * xmlHashLookup3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3)<br>
+<pre class="programlisting">void * xmlHashLookup3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3)<br>
</pre>
-<p>Find the userdata specified by the (@name, @name2, @name3) tuple.</p>
+<p>Find the payload specified by the (@key, @key2, @key3) tuple.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata</td>
+<td><span class="term"><i><tt>key3</tt></i>:</span></td>
+<td>third string key</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the a pointer to the userdata</td>
+<td>a pointer to the payload or NULL if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -499,27 +499,27 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashQLookup"></a>xmlHashQLookup ()</h3>
-<pre class="programlisting">void * xmlHashQLookup (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
+<pre class="programlisting">void * xmlHashQLookup (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br>
</pre>
-<p>Find the userdata specified by the QName @prefix:@name/@name.</p>
+<p>Find the payload specified by the QName @prefix:@name or @name.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
<td><span class="term"><i><tt>prefix</tt></i>:</span></td>
-<td>the prefix of the userdata</td>
+<td>prefix of the string key</td>
</tr>
<tr>
<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td>local name of the string key</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the pointer to the userdata</td>
+<td>a pointer to the payload or NULL if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -528,35 +528,35 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashQLookup2"></a>xmlHashQLookup2 ()</h3>
-<pre class="programlisting">void * xmlHashQLookup2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2)<br>
+<pre class="programlisting">void * xmlHashQLookup2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2)<br>
</pre>
-<p>Find the userdata specified by the QNames tuple</p>
+<p>Find the payload specified by the QNames tuple.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
<td><span class="term"><i><tt>prefix</tt></i>:</span></td>
-<td>the prefix of the userdata</td>
+<td>first prefix</td>
</tr>
<tr>
<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td>first local name</td>
</tr>
<tr>
<td><span class="term"><i><tt>prefix2</tt></i>:</span></td>
-<td>the second prefix of the userdata</td>
+<td>second prefix</td>
</tr>
<tr>
<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td>second local name</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the pointer to the userdata</td>
+<td>a pointer to the payload or NULL if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -565,43 +565,43 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashQLookup3"></a>xmlHashQLookup3 ()</h3>
-<pre class="programlisting">void * xmlHashQLookup3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3)<br>
+<pre class="programlisting">void * xmlHashQLookup3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix3, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3)<br>
</pre>
-<p>Find the userdata specified by the (@name, @name2, @name3) tuple.</p>
+<p>Find the payload specified by the QNames tuple.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
<td><span class="term"><i><tt>prefix</tt></i>:</span></td>
-<td>the prefix of the userdata</td>
+<td>first prefix</td>
</tr>
<tr>
<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td>first local name</td>
</tr>
<tr>
<td><span class="term"><i><tt>prefix2</tt></i>:</span></td>
-<td>the second prefix of the userdata</td>
+<td>second prefix</td>
</tr>
<tr>
<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td>second local name</td>
</tr>
<tr>
<td><span class="term"><i><tt>prefix3</tt></i>:</span></td>
-<td>the third prefix of the userdata</td>
+<td>third prefix</td>
</tr>
<tr>
<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata</td>
+<td>third local name</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the a pointer to the userdata</td>
+<td>a pointer to the payload or NULL if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -610,27 +610,27 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashRemoveEntry"></a>xmlHashRemoveEntry ()</h3>
-<pre class="programlisting">int xmlHashRemoveEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">int xmlHashRemoveEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Find the userdata specified by the @name and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p>
+<p>Find the entry specified by the @key and remove it from the hash table. Payload will be freed with @dealloc.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for removed item (if any)</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function for removed item or NULL</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 if the removal succeeded and -1 in case of error or not found.</td>
+<td>0 on success and -1 if no entry was found.</td>
</tr>
</tbody>
</table></div>
@@ -639,31 +639,31 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashRemoveEntry2"></a>xmlHashRemoveEntry2 ()</h3>
-<pre class="programlisting">int xmlHashRemoveEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">int xmlHashRemoveEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Find the userdata specified by the (@name, @name2) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p>
+<p>Remove an entry with two strings as key. See <a href="libxml2-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for removed item (if any)</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function for removed item or NULL</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 if the removal succeeded and -1 in case of error or not found.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -672,35 +672,35 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashRemoveEntry3"></a>xmlHashRemoveEntry3 ()</h3>
-<pre class="programlisting">int xmlHashRemoveEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">int xmlHashRemoveEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Find the userdata specified by the (@name, @name2, @name3) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</p>
+<p>Remove an entry with three strings as key. See <a href="libxml2-hash.html#xmlHashRemoveEntry">xmlHashRemoveEntry</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata</td>
+<td><span class="term"><i><tt>key3</tt></i>:</span></td>
+<td>third string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for removed item (if any)</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function for removed item or NULL</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 if the removal succeeded and -1 in case of error or not found.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -709,23 +709,23 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashScan"></a>xmlHashScan ()</h3>
-<pre class="programlisting">void xmlHashScan (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data)<br>
+<pre class="programlisting">void xmlHashScan (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br> void * data)<br>
</pre>
-<p>Scan the hash @table and applied @f to each value.</p>
+<p>Scan the hash @table and apply @scan to each value.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the scanner function for items in the hash</td>
+<td><span class="term"><i><tt>scan</tt></i>:</span></td>
+<td>scanner function for items in the hash</td>
</tr>
<tr>
<td><span class="term"><i><tt>data</tt></i>:</span></td>
-<td>extra data passed to f</td>
+<td>extra data passed to @scan</td>
</tr>
</tbody>
</table></div>
@@ -734,35 +734,35 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashScan3"></a>xmlHashScan3 ()</h3>
-<pre class="programlisting">void xmlHashScan3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> f, <br> void * data)<br>
+<pre class="programlisting">void xmlHashScan3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> <a href="libxml2-hash.html#xmlHashScanner">xmlHashScanner</a> scan, <br> void * data)<br>
</pre>
-<p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p>
+<p>Scan the hash @table and apply @scan to each value matching (@key, @key2, @key3) tuple. If one of the keys is null, the comparison is considered to match.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata or NULL</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key or NULL</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata or NULL</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key or NULL</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata or NULL</td>
+<td><span class="term"><i><tt>key3</tt></i>:</span></td>
+<td>third string key or NULL</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the scanner function for items in the hash</td>
+<td><span class="term"><i><tt>scan</tt></i>:</span></td>
+<td>scanner function for items in the hash</td>
</tr>
<tr>
<td><span class="term"><i><tt>data</tt></i>:</span></td>
-<td>extra data passed to f</td>
+<td>extra data passed to @scan</td>
</tr>
</tbody>
</table></div>
@@ -771,23 +771,23 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashScanFull"></a>xmlHashScanFull ()</h3>
-<pre class="programlisting">void xmlHashScanFull (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data)<br>
+<pre class="programlisting">void xmlHashScanFull (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br> void * data)<br>
</pre>
-<p>Scan the hash @table and applied @f to each value.</p>
+<p>Scan the hash @table and apply @scan to each value.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the scanner function for items in the hash</td>
+<td><span class="term"><i><tt>scan</tt></i>:</span></td>
+<td>scanner function for items in the hash</td>
</tr>
<tr>
<td><span class="term"><i><tt>data</tt></i>:</span></td>
-<td>extra data passed to f</td>
+<td>extra data passed to @scan</td>
</tr>
</tbody>
</table></div>
@@ -796,35 +796,35 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashScanFull3"></a>xmlHashScanFull3 ()</h3>
-<pre class="programlisting">void xmlHashScanFull3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> f, <br> void * data)<br>
+<pre class="programlisting">void xmlHashScanFull3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> <a href="libxml2-hash.html#xmlHashScannerFull">xmlHashScannerFull</a> scan, <br> void * data)<br>
</pre>
-<p>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</p>
+<p>Scan the hash @table and apply @scan to each value matching (@key, @key2, @key3) tuple. If one of the keys is null, the comparison is considered to match.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata or NULL</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key or NULL</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata or NULL</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key or NULL</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata or NULL</td>
+<td><span class="term"><i><tt>key3</tt></i>:</span></td>
+<td>third string key or NULL</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the scanner function for items in the hash</td>
+<td><span class="term"><i><tt>scan</tt></i>:</span></td>
+<td>scanner function for items in the hash</td>
</tr>
<tr>
<td><span class="term"><i><tt>data</tt></i>:</span></td>
-<td>extra data passed to f</td>
+<td>extra data passed to @scan</td>
</tr>
</tbody>
</table></div>
@@ -833,19 +833,19 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashSize"></a>xmlHashSize ()</h3>
-<pre class="programlisting">int xmlHashSize (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table)<br>
+<pre class="programlisting">int xmlHashSize (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash)<br>
</pre>
-<p>Query the number of elements installed in the hash @table.</p>
+<p>Query the number of elements in the hash table.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the number of elements in the hash table or -1 in case of error</td>
+<td>the number of elements in the hash table or -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -854,31 +854,31 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashUpdateEntry"></a>xmlHashUpdateEntry ()</h3>
-<pre class="programlisting">int xmlHashUpdateEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">int xmlHashUpdateEntry (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> void * payload, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Existing entry for this @name will be removed and freed with @f if found.</p>
+<p>Add a hash table entry. If an entry with this key already exists, the old payload will be freed and updated with the new value.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>userdata</tt></i>:</span></td>
-<td>a pointer to the userdata</td>
+<td><span class="term"><i><tt>payload</tt></i>:</span></td>
+<td>pointer to the payload</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for replaced item (if any)</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function for replaced item or NULL</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 the addition succeeded and -1 in case of error.</td>
+<td>0 in case of success, -1 if a memory allocation failed.</td>
</tr>
</tbody>
</table></div>
@@ -887,35 +887,35 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashUpdateEntry2"></a>xmlHashUpdateEntry2 ()</h3>
-<pre class="programlisting">int xmlHashUpdateEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">int xmlHashUpdateEntry2 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> void * payload, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Existing entry for this tuple will be removed and freed with @f if found.</p>
+<p>Add a hash table entry with two strings as key. See <a href="libxml2-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>userdata</tt></i>:</span></td>
-<td>a pointer to the userdata</td>
+<td><span class="term"><i><tt>payload</tt></i>:</span></td>
+<td>pointer to the payload</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for replaced item (if any)</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function for replaced item or NULL</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 the addition succeeded and -1 in case of error.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
@@ -924,39 +924,39 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlHashUpdateEntry3"></a>xmlHashUpdateEntry3 ()</h3>
-<pre class="programlisting">int xmlHashUpdateEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> table, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name3, <br> void * userdata, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> f)<br>
+<pre class="programlisting">int xmlHashUpdateEntry3 (<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> hash, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key2, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * key3, <br> void * payload, <br> <a href="libxml2-hash.html#xmlHashDeallocator">xmlHashDeallocator</a> dealloc)<br>
</pre>
-<p>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Existing entry for this tuple will be removed and freed with @f if found.</p>
+<p>Add a hash table entry with three strings as key. See <a href="libxml2-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>table</tt></i>:</span></td>
-<td>the hash table</td>
+<td><span class="term"><i><tt>hash</tt></i>:</span></td>
+<td>hash table</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name</tt></i>:</span></td>
-<td>the name of the userdata</td>
+<td><span class="term"><i><tt>key</tt></i>:</span></td>
+<td>first string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name2</tt></i>:</span></td>
-<td>a second name of the userdata</td>
+<td><span class="term"><i><tt>key2</tt></i>:</span></td>
+<td>second string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>name3</tt></i>:</span></td>
-<td>a third name of the userdata</td>
+<td><span class="term"><i><tt>key3</tt></i>:</span></td>
+<td>third string key</td>
</tr>
<tr>
-<td><span class="term"><i><tt>userdata</tt></i>:</span></td>
-<td>a pointer to the userdata</td>
+<td><span class="term"><i><tt>payload</tt></i>:</span></td>
+<td>pointer to the payload</td>
</tr>
<tr>
-<td><span class="term"><i><tt>f</tt></i>:</span></td>
-<td>the deallocator function for replaced item (if any)</td>
+<td><span class="term"><i><tt>dealloc</tt></i>:</span></td>
+<td>deallocator function for replaced item or NULL</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>0 the addition succeeded and -1 in case of error.</td>
+<td>0 on success and -1 in case of error.</td>
</tr>
</tbody>
</table></div>
diff --git a/doc/devhelp/libxml2-parser.html b/doc/devhelp/libxml2-parser.html
index 07410f11..f18176f5 100644
--- a/doc/devhelp/libxml2-parser.html
+++ b/doc/devhelp/libxml2-parser.html
@@ -27,6 +27,7 @@
#define <a href="#XML_DETECT_IDS">XML_DETECT_IDS</a>;
#define <a href="#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a>;
#define <a href="#XML_SKIP_IDS">XML_SKIP_IDS</a>;
+typedef struct _xmlAttrHashBucket <a href="#xmlAttrHashBucket">xmlAttrHashBucket</a>;
typedef enum <a href="#xmlFeature">xmlFeature</a>;
typedef enum <a href="#xmlParserInputState">xmlParserInputState</a>;
typedef enum <a href="#xmlParserMode">xmlParserMode</a>;
@@ -34,6 +35,7 @@ typedef struct _xmlParserNodeInfo <a href="#xmlParserNodeInfo">xmlParserNodeInfo
typedef <a href="libxml2-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> * <a href="#xmlParserNodeInfoPtr">xmlParserNodeInfoPtr</a>;
typedef struct _xmlParserNodeInfoSeq <a href="#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a>;
typedef <a href="libxml2-parser.html#xmlParserNodeInfoSeq">xmlParserNodeInfoSeq</a> * <a href="#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a>;
+typedef struct _xmlParserNsData <a href="#xmlParserNsData">xmlParserNsData</a>;
typedef enum <a href="#xmlParserOption">xmlParserOption</a>;
typedef struct _xmlSAXHandlerV1 <a href="#xmlSAXHandlerV1">xmlSAXHandlerV1</a>;
typedef <a href="libxml2-parser.html#xmlSAXHandlerV1">xmlSAXHandlerV1</a> * <a href="#xmlSAXHandlerV1Ptr">xmlSAXHandlerV1Ptr</a>;
@@ -72,16 +74,17 @@ long <a href="#xmlByteConsumed">xmlByteConsumed</a> (<a href="libxml2-tree.htm
void <a href="#xmlCleanupParser">xmlCleanupParser</a> (void);
void <a href="#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a> (<a href="libxml2-parser.html#xmlParserNodeInfoSeqPtr">xmlParserNodeInfoSeqPtr</a> seq);
void <a href="#xmlClearParserCtxt">xmlClearParserCtxt</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt);
-<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a> (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * cur);
+<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateDocParserCtxt">xmlCreateDocParserCtxt</a> (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str);
<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreateIOParserCtxt">xmlCreateIOParserCtxt</a> (<a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br> void * user_data, <br> <a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br> <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br> void * ioctx, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a> (<a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br> void * user_data, <br> const char * chunk, <br> int size, <br> const char * filename);
-<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadDoc">xmlCtxtReadDoc</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * cur, <br> const char * URL, <br> const char * encoding, <br> int options);
+<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadDoc">xmlCtxtReadDoc</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br> const char * URL, <br> const char * encoding, <br> int options);
<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadFd">xmlCtxtReadFd</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> int fd, <br> const char * URL, <br> const char * encoding, <br> int options);
<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadFile">xmlCtxtReadFile</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const char * filename, <br> const char * encoding, <br> int options);
<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadIO">xmlCtxtReadIO</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> <a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br> <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br> void * ioctx, <br> const char * URL, <br> const char * encoding, <br> int options);
<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> <a href="#xmlCtxtReadMemory">xmlCtxtReadMemory</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const char * buffer, <br> int size, <br> const char * URL, <br> const char * encoding, <br> int options);
void <a href="#xmlCtxtReset">xmlCtxtReset</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt);
int <a href="#xmlCtxtResetPush">xmlCtxtResetPush</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const char * chunk, <br> int size, <br> const char * filename, <br> const char * encoding);
+void <a href="#xmlCtxtSetMaxAmplification">xmlCtxtSetMaxAmplification</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> unsigned maxAmpl);
int <a href="#xmlCtxtUseOptions">xmlCtxtUseOptions</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> int options);
typedef <a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlExternalEntityLoader">xmlExternalEntityLoader</a> (const char * URL, <br> const char * ID, <br> <a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> context);
void <a href="#xmlFreeParserCtxt">xmlFreeParserCtxt</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt);
@@ -141,6 +144,14 @@ int <a href="#xmlSetFeature">xmlSetFeature</a> (<a href="libxml2-tree.html#xml
void <a href="#xmlSetupParserForBuffer">xmlSetupParserForBuffer</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * buffer, <br> const char * filename);
void <a href="#xmlStopParser">xmlStopParser</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt);
int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (int val);
+int <a href="#xmlThrDefDoValidityCheckingDefaultValue">xmlThrDefDoValidityCheckingDefaultValue</a> (int v);
+int <a href="#xmlThrDefGetWarningsDefaultValue">xmlThrDefGetWarningsDefaultValue</a> (int v);
+int <a href="#xmlThrDefKeepBlanksDefaultValue">xmlThrDefKeepBlanksDefaultValue</a> (int v);
+int <a href="#xmlThrDefLineNumbersDefaultValue">xmlThrDefLineNumbersDefaultValue</a> (int v);
+int <a href="#xmlThrDefLoadExtDtdDefaultValue">xmlThrDefLoadExtDtdDefaultValue</a> (int v);
+int <a href="#xmlThrDefParserDebugEntities">xmlThrDefParserDebugEntities</a> (int v);
+int <a href="#xmlThrDefPedanticParserDefaultValue">xmlThrDefPedanticParserDefaultValue</a> (int v);
+int <a href="#xmlThrDefSubstituteEntitiesDefaultValue">xmlThrDefSubstituteEntitiesDefaultValue</a> (int v);
</pre>
</div>
<div class="refsect1" lang="en"><h2>Description</h2></div>
@@ -152,7 +163,7 @@ int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (in
<a name="XML_COMPLETE_ATTRS">Macro </a>XML_COMPLETE_ATTRS</h3>
<pre class="programlisting">#define <a href="#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a>;
</pre>
-<p>Bit in the loadsubset context field to tell to do complete the elements attributes lists with the ones defaulted from the DTDs. Use it to initialize <a href="libxml2-globals.html#xmlLoadExtDtdDefaultValue">xmlLoadExtDtdDefaultValue</a>.</p>
+<p>Bit in the loadsubset context field to tell to do complete the elements attributes lists with the ones defaulted from the DTDs. Use it to initialize xmlLoadExtDtdDefaultValue.</p>
</div>
<hr>
<div class="refsect2" lang="en">
@@ -168,7 +179,7 @@ int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (in
<a name="XML_DETECT_IDS">Macro </a>XML_DETECT_IDS</h3>
<pre class="programlisting">#define <a href="#XML_DETECT_IDS">XML_DETECT_IDS</a>;
</pre>
-<p>Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize <a href="libxml2-globals.html#xmlLoadExtDtdDefaultValue">xmlLoadExtDtdDefaultValue</a>.</p>
+<p>Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize xmlLoadExtDtdDefaultValue.</p>
</div>
<hr>
<div class="refsect2" lang="en">
@@ -184,7 +195,17 @@ int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (in
<a name="XML_SKIP_IDS">Macro </a>XML_SKIP_IDS</h3>
<pre class="programlisting">#define <a href="#XML_SKIP_IDS">XML_SKIP_IDS</a>;
</pre>
-<p>Bit in the loadsubset context field to tell to not do ID/REFs registration. Used to initialize <a href="libxml2-globals.html#xmlLoadExtDtdDefaultValue">xmlLoadExtDtdDefaultValue</a> in some special cases.</p>
+<p>Bit in the loadsubset context field to tell to not do ID/REFs registration. Used to initialize xmlLoadExtDtdDefaultValue in some special cases.</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlAttrHashBucket">Structure </a>xmlAttrHashBucket</h3>
+<pre class="programlisting">struct _xmlAttrHashBucket {
+The content of this structure is not made public by the API.
+} xmlAttrHashBucket;
+</pre>
+<p></p>
</div>
<hr>
<div class="refsect2" lang="en">
@@ -251,7 +272,8 @@ int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (in
<a name="XML_PARSER_SYSTEM_LITERAL">XML_PARSER_SYSTEM_LITERAL</a> = 13 /* within a SYSTEM value */
<a name="XML_PARSER_EPILOG">XML_PARSER_EPILOG</a> = 14 /* the Misc* after the last end tag */
<a name="XML_PARSER_IGNORE">XML_PARSER_IGNORE</a> = 15 /* within an IGNORED section */
- <a name="XML_PARSER_PUBLIC_LITERAL">XML_PARSER_PUBLIC_LITERAL</a> = 16 /* within a PUBLIC value */
+ <a name="XML_PARSER_PUBLIC_LITERAL">XML_PARSER_PUBLIC_LITERAL</a> = 16 /* within a PUBLIC value */
+ <a name="XML_PARSER_XML_DECL">XML_PARSER_XML_DECL</a> = 17 /* before XML decl (but after BOM) */
};
</pre>
<p></p>
@@ -316,6 +338,16 @@ int <a href="#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a> (in
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlParserNsData">Structure </a>xmlParserNsData</h3>
+<pre class="programlisting">struct _xmlParserNsData {
+The content of this structure is not made public by the API.
+} xmlParserNsData;
+</pre>
+<p></p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlParserOption">Enum </a>xmlParserOption</h3>
<pre class="programlisting">enum <a href="#xmlParserOption">xmlParserOption</a> {
<a name="XML_PARSE_RECOVER">XML_PARSE_RECOVER</a> = 1 /* recover on errors */
@@ -1026,7 +1058,7 @@ The content of this structure is not made public by the API.
<a name="setDocumentLocatorSAXFunc"></a>Function type setDocumentLocatorSAXFunc</h3>
<pre class="programlisting">void setDocumentLocatorSAXFunc (void * ctx, <br> <a href="libxml2-tree.html#xmlSAXLocatorPtr">xmlSAXLocatorPtr</a> loc)<br>
</pre>
-<p>Receive the document locator at startup, actually <a href="libxml2-globals.html#xmlDefaultSAXLocator">xmlDefaultSAXLocator</a>. Everything is available on the context, so this is useless in our case.</p>
+<p>Receive the document locator at startup, actually xmlDefaultSAXLocator. Everything is available on the context, so this is useless in our case.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -1235,6 +1267,14 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlParserVersion">Variable </a>xmlParserVersion</h3>
+<pre class="programlisting">const char * const xmlParserVersion;
+</pre>
+<p>Constant string describing the internal version of the library</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlByteConsumed"></a>xmlByteConsumed ()</h3>
<pre class="programlisting">long xmlByteConsumed (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br>
</pre>
@@ -1295,14 +1335,14 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlCreateDocParserCtxt"></a>xmlCreateDocParserCtxt ()</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateDocParserCtxt (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * cur)<br>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlCreateDocParserCtxt (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str)<br>
</pre>
<p>Creates a parser context for an XML in-memory document.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
<tr>
-<td><span class="term"><i><tt>cur</tt></i>:</span></td>
+<td><span class="term"><i><tt>str</tt></i>:</span></td>
<td>a pointer to an array of <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a>
</td>
</tr>
@@ -1395,7 +1435,7 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en">
<h3>
<a name="xmlCtxtReadDoc"></a>xmlCtxtReadDoc ()</h3>
-<pre class="programlisting"><a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadDoc (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * cur, <br> const char * URL, <br> const char * encoding, <br> int options)<br>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> xmlCtxtReadDoc (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br> const char * URL, <br> const char * encoding, <br> int options)<br>
</pre>
<p>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</p>
<div class="variablelist"><table border="0">
@@ -1406,7 +1446,7 @@ The content of this structure is not made public by the API.
<td>an XML parser context</td>
</tr>
<tr>
-<td><span class="term"><i><tt>cur</tt></i>:</span></td>
+<td><span class="term"><i><tt>str</tt></i>:</span></td>
<td>a pointer to a zero terminated string</td>
</tr>
<tr>
@@ -1644,6 +1684,27 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlCtxtSetMaxAmplification"></a>xmlCtxtSetMaxAmplification ()</h3>
+<pre class="programlisting">void xmlCtxtSetMaxAmplification (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> unsigned maxAmpl)<br>
+</pre>
+<p>To protect against exponential entity expansion ("billion laughs"), the size of serialized output is (roughly) limited to the input size multiplied by this factor. The default value is 5. When working with documents making heavy use of entity expansion, it can be necessary to increase the value. For security reasons, this should only be considered when processing trusted input.</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>ctxt</tt></i>:</span></td>
+<td>an XML parser context</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>maxAmpl</tt></i>:</span></td>
+<td>maximum amplification factor</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlCtxtUseOptions"></a>xmlCtxtUseOptions ()</h3>
<pre class="programlisting">int xmlCtxtUseOptions (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> int options)<br>
</pre>
@@ -1822,7 +1883,7 @@ The content of this structure is not made public by the API.
<a name="xmlInitParser"></a>xmlInitParser ()</h3>
<pre class="programlisting">void xmlInitParser (void)<br>
</pre>
-<p>Initialization function for the XML parser. This is not reentrant. Call once before processing in case of use in multithreaded programs.</p>
+<p>Initialization function for the XML parser. Call once from the main thread before using the library in multithreaded programs.</p>
</div>
<hr>
<div class="refsect2" lang="en">
@@ -3149,6 +3210,174 @@ The content of this structure is not made public by the API.
</table></div>
</div>
<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefDoValidityCheckingDefaultValue"></a>xmlThrDefDoValidityCheckingDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefDoValidityCheckingDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefGetWarningsDefaultValue"></a>xmlThrDefGetWarningsDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefGetWarningsDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefKeepBlanksDefaultValue"></a>xmlThrDefKeepBlanksDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefKeepBlanksDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefLineNumbersDefaultValue"></a>xmlThrDefLineNumbersDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefLineNumbersDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefLoadExtDtdDefaultValue"></a>xmlThrDefLoadExtDtdDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefLoadExtDtdDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefParserDebugEntities"></a>xmlThrDefParserDebugEntities ()</h3>
+<pre class="programlisting">int xmlThrDefParserDebugEntities (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefPedanticParserDefaultValue"></a>xmlThrDefPedanticParserDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefPedanticParserDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefSubstituteEntitiesDefaultValue"></a>xmlThrDefSubstituteEntitiesDefaultValue ()</h3>
+<pre class="programlisting">int xmlThrDefSubstituteEntitiesDefaultValue (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
</div>
</div>
</body>
diff --git a/doc/devhelp/libxml2-parserInternals.html b/doc/devhelp/libxml2-parserInternals.html
index 2a0d6d5b..38a46419 100644
--- a/doc/devhelp/libxml2-parserInternals.html
+++ b/doc/devhelp/libxml2-parserInternals.html
@@ -1302,7 +1302,7 @@ int <a href="#xmlSwitchToEncoding">xmlSwitchToEncoding</a> (<a href="libxml2-tr
<a name="xmlParseCharData"></a>xmlParseCharData ()</h3>
<pre class="programlisting">void xmlParseCharData (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> int cdata)<br>
</pre>
-<p>DEPRECATED: Internal function, don't use. Parse character data. Always makes progress if the first char isn't '&lt;' or '&amp;'. if we are within a CDATA section ']]&gt;' marks an end of section. The right angle bracket (&gt;) may be represented using the string "&amp;gt;", and must, for compatibility, be escaped using "&amp;gt;" or a character <a href="libxml2-SAX.html#reference">reference</a> when it appears in the string "]]&gt;" in content, when that string is not marking the end of a CDATA section. [14] CharData ::= [^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</p>
+<p>DEPRECATED: Internal function, don't use.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -2410,7 +2410,7 @@ int <a href="#xmlSwitchToEncoding">xmlSwitchToEncoding</a> (<a href="libxml2-tr
<a name="xmlSwitchEncoding"></a>xmlSwitchEncoding ()</h3>
<pre class="programlisting">int xmlSwitchEncoding (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br>
</pre>
-<p>change the input functions when discovering the character encoding of a given entity.</p>
+<p>Use encoding specified by enum to decode input data. This function can be used to enforce the encoding of chunks passed to <a href="libxml2-parser.html#xmlParseChunk">xmlParseChunk</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -2435,7 +2435,7 @@ int <a href="#xmlSwitchToEncoding">xmlSwitchToEncoding</a> (<a href="libxml2-tr
<a name="xmlSwitchInputEncoding"></a>xmlSwitchInputEncoding ()</h3>
<pre class="programlisting">int xmlSwitchInputEncoding (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)<br>
</pre>
-<p>change the input functions when discovering the character encoding of a given entity.</p>
+<p>DEPRECATED: Internal function, don't use. Use encoding handler to decode input data.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -2464,7 +2464,7 @@ int <a href="#xmlSwitchToEncoding">xmlSwitchToEncoding</a> (<a href="libxml2-tr
<a name="xmlSwitchToEncoding"></a>xmlSwitchToEncoding ()</h3>
<pre class="programlisting">int xmlSwitchToEncoding (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> handler)<br>
</pre>
-<p>change the input functions when discovering the character encoding of a given entity.</p>
+<p>Use encoding handler to decode input data. This function can be used to enforce the encoding of chunks passed to <a href="libxml2-parser.html#xmlParseChunk">xmlParseChunk</a>.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
diff --git a/doc/devhelp/libxml2-threads.html b/doc/devhelp/libxml2-threads.html
index 2dcd5b05..6efceb7b 100644
--- a/doc/devhelp/libxml2-threads.html
+++ b/doc/devhelp/libxml2-threads.html
@@ -26,10 +26,10 @@
typedef <a href="libxml2-threads.html#xmlMutex">xmlMutex</a> * <a href="#xmlMutexPtr">xmlMutexPtr</a>;
typedef struct _xmlRMutex <a href="#xmlRMutex">xmlRMutex</a>;
typedef <a href="libxml2-threads.html#xmlRMutex">xmlRMutex</a> * <a href="#xmlRMutexPtr">xmlRMutexPtr</a>;
+int <a href="#xmlCheckThreadLocalStorage">xmlCheckThreadLocalStorage</a> (void);
void <a href="#xmlCleanupThreads">xmlCleanupThreads</a> (void);
void <a href="#xmlFreeMutex">xmlFreeMutex</a> (<a href="libxml2-threads.html#xmlMutexPtr">xmlMutexPtr</a> tok);
void <a href="#xmlFreeRMutex">xmlFreeRMutex</a> (<a href="libxml2-threads.html#xmlRMutexPtr">xmlRMutexPtr</a> tok);
-<a href="libxml2-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> <a href="#xmlGetGlobalState">xmlGetGlobalState</a> (void);
int <a href="#xmlGetThreadId">xmlGetThreadId</a> (void);
void <a href="#xmlInitThreads">xmlInitThreads</a> (void);
int <a href="#xmlIsMainThread">xmlIsMainThread</a> (void);
@@ -85,6 +85,21 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlCheckThreadLocalStorage"></a>xmlCheckThreadLocalStorage ()</h3>
+<pre class="programlisting">int xmlCheckThreadLocalStorage (void)<br>
+</pre>
+<p>Check whether thread-local storage could be allocated. In cross-platform code running in multithreaded environments, this function should be called once in each thread before calling other library functions to make sure that thread-local storage was allocated properly.</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 on success or -1 if a memory allocation failed. A failed allocation signals a typically fatal and irrecoverable out-of-memory situation. Don't call any library functions in this case. This function never fails if the library is compiled with support for thread-local storage. This function never fails for the "main" thread which is the first thread calling <a href="libxml2-parser.html#xmlInitParser">xmlInitParser</a>. Available since v2.12.0.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlCleanupThreads"></a>xmlCleanupThreads ()</h3>
<pre class="programlisting">void xmlCleanupThreads (void)<br>
</pre>
@@ -123,21 +138,6 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
-<a name="xmlGetGlobalState"></a>xmlGetGlobalState ()</h3>
-<pre class="programlisting"><a href="libxml2-globals.html#xmlGlobalStatePtr">xmlGlobalStatePtr</a> xmlGetGlobalState (void)<br>
-</pre>
-<p>DEPRECATED: Internal function, do not use. xmlGetGlobalState() is called to retrieve the global state for a thread.</p>
-<div class="variablelist"><table border="0">
-<col align="left">
-<tbody><tr>
-<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>the thread global state or NULL in case of error</td>
-</tr></tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
<a name="xmlGetThreadId"></a>xmlGetThreadId ()</h3>
<pre class="programlisting">int xmlGetThreadId (void)<br>
</pre>
@@ -164,7 +164,7 @@ The content of this structure is not made public by the API.
<a name="xmlIsMainThread"></a>xmlIsMainThread ()</h3>
<pre class="programlisting">int xmlIsMainThread (void)<br>
</pre>
-<p>DEPRECATED: Internal function, do not use. xmlIsMainThread() check whether the current thread is the main thread.</p>
+<p>DEPRECATED: Internal function, do not use. Check whether the current thread is the main thread.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody><tr>
diff --git a/doc/devhelp/libxml2-tree.html b/doc/devhelp/libxml2-tree.html
index 4d4e1ebd..61d6aa78 100644
--- a/doc/devhelp/libxml2-tree.html
+++ b/doc/devhelp/libxml2-tree.html
@@ -134,6 +134,8 @@ void <a href="#xmlDOMWrapFreeCtxt">xmlDOMWrapFreeCtxt</a> (<a href="libxml2-tre
<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> <a href="#xmlDOMWrapNewCtxt">xmlDOMWrapNewCtxt</a> (void);
int <a href="#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a> (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br> int options);
int <a href="#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a> (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br> int options);
+<a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> <a href="#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a> (<a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func);
+typedef void <a href="#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlDocCopyNode">xmlDocCopyNode</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> int extended);
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlDocCopyNodeList">xmlDocCopyNodeList</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
int <a href="#xmlDocDump">xmlDocDump</a> (FILE * f, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur);
@@ -218,6 +220,8 @@ void <a href="#xmlNodeSetName">xmlNodeSetName</a> (<a href="libxml2-tree.html#
void <a href="#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br> int val);
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlPreviousElementSibling">xmlPreviousElementSibling</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
int <a href="#xmlReconciliateNs">xmlReconciliateNs</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> tree);
+<a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> <a href="#xmlRegisterNodeDefault">xmlRegisterNodeDefault</a> (<a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func);
+typedef void <a href="#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
int <a href="#xmlRemoveProp">xmlRemoveProp</a> (<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur);
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlReplaceNode">xmlReplaceNode</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> old, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
int <a href="#xmlSaveFile">xmlSaveFile</a> (const char * filename, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur);
@@ -242,6 +246,10 @@ const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSplitQ
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a> (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br> int len);
int <a href="#xmlTextConcat">xmlTextConcat</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content, <br> int len);
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> <a href="#xmlTextMerge">xmlTextMerge</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> first, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> second);
+<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> <a href="#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a> (<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> v);
+int <a href="#xmlThrDefDefaultBufferSize">xmlThrDefDefaultBufferSize</a> (int v);
+<a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> <a href="#xmlThrDefDeregisterNodeDefault">xmlThrDefDeregisterNodeDefault</a> (<a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func);
+<a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> <a href="#xmlThrDefRegisterNodeDefault">xmlThrDefRegisterNodeDefault</a> (<a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func);
void <a href="#xmlUnlinkNode">xmlUnlinkNode</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
int <a href="#xmlUnsetNsProp">xmlUnsetNsProp</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br> <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
int <a href="#xmlUnsetProp">xmlUnsetProp</a> (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
@@ -516,11 +524,11 @@ The content of this structure is not made public by the API.
struct _xmlDtd * extSubset : the document external subset
struct _xmlNs * oldNs : Global namespace, the old way
const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * version : the XML version string
- const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * encoding : external initial encoding, if any
+ const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * encoding : actual encoding, if any
void * ids : Hash table for ID attributes if any
void * refs : Hash table for IDREFs attributes if any
const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * URL : The URI for that document
- int charset : Internal flag for charset handling, actually an <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a>
+ int charset : unused
struct _xmlDict * dict : dict used to allocate names or NULL
void * psvi : for type/PSVI information
int parseFlags : set of <a href="libxml2-parser.html#xmlParserOption">xmlParserOption</a> used to parse the document
@@ -952,7 +960,7 @@ The content of this structure is not made public by the API.
int * spaceTab : array of space infos
int depth : to prevent entity substitution loops
<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> entity : used to check entities boundaries
- int charset : encoding of the in-memory content actually an <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a>
+ int charset : unused
int nodelen : Those two fields are there to
int nodemem : Speed up large node parsing
int pedantic : signal pedantic warnings
@@ -973,7 +981,7 @@ The content of this structure is not made public by the API.
int nsNr : the number of inherited namespaces
int nsMax : the size of the arrays
const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * * nsTab : the array of prefix/namespace name
- int * attallocs : which <a href="libxml2-SAX.html#attribute">attribute</a> were allocated
+ unsigned * attallocs : which <a href="libxml2-SAX.html#attribute">attribute</a> were allocated
<a href="libxml2-parser.html#xmlStartTag">xmlStartTag</a> * pushTab : array of data for push
<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> attsDefault : defaulted attributes if any
<a href="libxml2-hash.html#xmlHashTablePtr">xmlHashTablePtr</a> attsSpecial : non-CDATA attributes if any
@@ -997,6 +1005,10 @@ The content of this structure is not made public by the API.
int endCheckState : quote state for push parser
unsigned short nbErrors : number of errors
unsigned short nbWarnings : number of warnings
+ unsigned maxAmpl : maximum amplification factor
+ <a href="libxml2-parser.html#xmlParserNsData">xmlParserNsData</a> * nsdb : namespace database
+ unsigned attrHashMax : allocated size
+ <a href="libxml2-parser.html#xmlAttrHashBucket">xmlAttrHashBucket</a> * attrHash : atttribute hash table
} xmlParserCtxt;
</pre>
<p></p>
@@ -1025,9 +1037,9 @@ The content of this structure is not made public by the API.
int col : Current column
unsigned long consumed : How many xmlChars already consumed
<a href="libxml2-parser.html#xmlParserInputDeallocate">xmlParserInputDeallocate</a> free : function to deallocate the base
- const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * encoding : the encoding string for entity
+ const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * encoding : unused
const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * version : the version string for entity
- int standalone : Was that entity marked standalone
+ int flags : Flags
int id : an unique identifier for the entity
unsigned long parentConsumed : consumed bytes from parents
<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a> entity : entity, if any
@@ -1197,6 +1209,36 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlDeregisterNodeFunc"></a>Function type xmlDeregisterNodeFunc</h3>
+<pre class="programlisting">void xmlDeregisterNodeFunc (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br>
+</pre>
+<p>Signature for the deregistration callback of a discarded node</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody><tr>
+<td><span class="term"><i><tt>node</tt></i>:</span></td>
+<td>the current node</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlRegisterNodeFunc"></a>Function type xmlRegisterNodeFunc</h3>
+<pre class="programlisting">void xmlRegisterNodeFunc (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br>
+</pre>
+<p>Signature for the registration callback of a created node</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody><tr>
+<td><span class="term"><i><tt>node</tt></i>:</span></td>
+<td>the current node</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlAddChild"></a>xmlAddChild ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> xmlAddChild (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br>
</pre>
@@ -1422,7 +1464,7 @@ The content of this structure is not made public by the API.
<a name="xmlBufNodeDump"></a>xmlBufNodeDump ()</h3>
<pre class="programlisting">size_t xmlBufNodeDump (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br> int level, <br> int format)<br>
</pre>
-<p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -1670,7 +1712,7 @@ The content of this structure is not made public by the API.
<a name="xmlBufferCreateStatic"></a>xmlBufferCreateStatic ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> xmlBufferCreateStatic (void * mem, <br> size_t size)<br>
</pre>
-<p>Create an XML buffer initialized with bytes.</p>
+<p></p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -1684,7 +1726,7 @@ The content of this structure is not made public by the API.
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td></td>
+<td>an XML buffer initialized with bytes.</td>
</tr>
</tbody>
</table></div>
@@ -2403,6 +2445,27 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlDeregisterNodeDefault"></a>xmlDeregisterNodeDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlDeregisterNodeDefault (<a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)<br>
+</pre>
+<p>Registers a callback for node destruction</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td>function pointer to the new DeregisterNodeFunc</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td>the previous value of the deregistration function</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlDocCopyNode"></a>xmlDocCopyNode ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> xmlDocCopyNode (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> int extended)<br>
</pre>
@@ -2485,7 +2548,7 @@ The content of this structure is not made public by the API.
<a name="xmlDocDumpFormatMemory"></a>xmlDocDumpFormatMemory ()</h3>
<pre class="programlisting">void xmlDocDumpFormatMemory (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br> <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br> int * size, <br> int format)<br>
</pre>
-<p>Dump an XML document in memory and return the #xmlChar * and it's size. It's up to the caller to free the memory with xmlFree(). Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<p>Dump an XML document in memory and return the #xmlChar * and it's size. It's up to the caller to free the memory with xmlFree(). Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -2514,7 +2577,7 @@ The content of this structure is not made public by the API.
<a name="xmlDocDumpFormatMemoryEnc"></a>xmlDocDumpFormatMemoryEnc ()</h3>
<pre class="programlisting">void xmlDocDumpFormatMemoryEnc (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br> <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br> int * doc_txt_len, <br> const char * txt_encoding, <br> int format)<br>
</pre>
-<p>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree(). Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<p>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree(). Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -2619,7 +2682,7 @@ The content of this structure is not made public by the API.
</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. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td>
+<td>the number of bytes written or -1 in case of failure. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</td>
</tr>
</tbody>
</table></div>
@@ -4059,7 +4122,7 @@ The content of this structure is not made public by the API.
<a name="xmlNodeDump"></a>xmlNodeDump ()</h3>
<pre class="programlisting">int xmlNodeDump (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br> int level, <br> int format)<br>
</pre>
-<p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called. Since this is using <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> structures it is limited to 2GB and somehow deprecated, use xmlNodeDumpOutput() instead.</p>
+<p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called. Since this is using <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> structures it is limited to 2GB and somehow deprecated, use xmlNodeDumpOutput() instead.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -4096,7 +4159,7 @@ The content of this structure is not made public by the API.
<a name="xmlNodeDumpOutput"></a>xmlNodeDumpOutput ()</h3>
<pre class="programlisting">void xmlNodeDumpOutput (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br> <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br> int level, <br> int format, <br> const char * encoding)<br>
</pre>
-<p>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<p>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -4473,6 +4536,27 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlRegisterNodeDefault"></a>xmlRegisterNodeDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlRegisterNodeDefault (<a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)<br>
+</pre>
+<p>Registers a callback for node creation</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td>function pointer to the new RegisterNodeFunc</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td>the old value of the registration function</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlRemoveProp"></a>xmlRemoveProp ()</h3>
<pre class="programlisting">int xmlRemoveProp (<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br>
</pre>
@@ -4606,7 +4690,7 @@ The content of this structure is not made public by the API.
<a name="xmlSaveFormatFile"></a>xmlSaveFormatFile ()</h3>
<pre class="programlisting">int xmlSaveFormatFile (const char * filename, <br> <a href="libxml2-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="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<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 xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -4657,7 +4741,7 @@ The content of this structure is not made public by the API.
</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="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td>
+<td>the number of bytes written or -1 in case of error. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</td>
</tr>
</tbody>
</table></div>
@@ -5091,6 +5175,90 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlThrDefBufferAllocScheme"></a>xmlThrDefBufferAllocScheme ()</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> xmlThrDefBufferAllocScheme (<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefDefaultBufferSize"></a>xmlThrDefDefaultBufferSize ()</h3>
+<pre class="programlisting">int xmlThrDefDefaultBufferSize (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefDeregisterNodeDefault"></a>xmlThrDefDeregisterNodeDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> xmlThrDefDeregisterNodeDefault (<a href="libxml2-tree.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a> func)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefRegisterNodeDefault"></a>xmlThrDefRegisterNodeDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> xmlThrDefRegisterNodeDefault (<a href="libxml2-tree.html#xmlRegisterNodeFunc">xmlRegisterNodeFunc</a> func)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlUnlinkNode"></a>xmlUnlinkNode ()</h3>
<pre class="programlisting">void xmlUnlinkNode (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br>
</pre>
diff --git a/doc/devhelp/libxml2-valid.html b/doc/devhelp/libxml2-valid.html
index 821d3fa6..7f488dd7 100644
--- a/doc/devhelp/libxml2-valid.html
+++ b/doc/devhelp/libxml2-valid.html
@@ -1711,7 +1711,7 @@ The content of this structure is not made public by the API.
</tr>
<tr>
<td><span class="term"><i><tt>root</tt></i>:</span></td>
-<td></td>
+<td>an element instance</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
diff --git a/doc/devhelp/libxml2-xmlIO.html b/doc/devhelp/libxml2-xmlIO.html
index 1210a2f5..a8cc38c1 100644
--- a/doc/devhelp/libxml2-xmlIO.html
+++ b/doc/devhelp/libxml2-xmlIO.html
@@ -53,6 +53,8 @@ int <a href="#xmlOutputBufferClose">xmlOutputBufferClose</a> (<a href="libxml2-
<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFd">xmlOutputBufferCreateFd</a> (int fd, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder);
<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFile">xmlOutputBufferCreateFile</a> (FILE * file, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder);
<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a> (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br> int compression);
+<a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> <a href="#xmlOutputBufferCreateFilenameDefault">xmlOutputBufferCreateFilenameDefault</a> (<a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func);
+typedef <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br> int compression);
<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> <a href="#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a> (<a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br> <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br> void * ioctx, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder);
int <a href="#xmlOutputBufferFlush">xmlOutputBufferFlush</a> (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out);
const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a> (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out);
@@ -68,6 +70,8 @@ char * <a href="#xmlParserGetDirectory">xmlParserGetDirectory</a> (const char *
<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFd">xmlParserInputBufferCreateFd</a> (int fd, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFile">xmlParserInputBufferCreateFile</a> (FILE * file, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFilename">xmlParserInputBufferCreateFilename</a> (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
+<a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> <a href="#xmlParserInputBufferCreateFilenameDefault">xmlParserInputBufferCreateFilenameDefault</a> (<a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func);
+typedef <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateIO">xmlParserInputBufferCreateIO</a> (<a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br> <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br> void * ioctx, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateMem">xmlParserInputBufferCreateMem</a> (const char * mem, <br> int size, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> <a href="#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a> (const char * mem, <br> int size, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
@@ -81,6 +85,8 @@ void <a href="#xmlRegisterDefaultOutputCallbacks">xmlRegisterDefaultOutputCallba
void <a href="#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a> (void);
int <a href="#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a> (<a href="libxml2-xmlIO.html#xmlInputMatchCallback">xmlInputMatchCallback</a> matchFunc, <br> <a href="libxml2-xmlIO.html#xmlInputOpenCallback">xmlInputOpenCallback</a> openFunc, <br> <a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> readFunc, <br> <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> closeFunc);
int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a href="libxml2-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a> matchFunc, <br> <a href="libxml2-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a> openFunc, <br> <a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> writeFunc, <br> <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> closeFunc);
+<a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> <a href="#xmlThrDefOutputBufferCreateFilenameDefault">xmlThrDefOutputBufferCreateFilenameDefault</a> (<a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func);
+<a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> <a href="#xmlThrDefParserInputBufferCreateFilenameDefault">xmlThrDefParserInputBufferCreateFilenameDefault</a> (<a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func);
</pre>
</div>
<div class="refsect1" lang="en"><h2>Description</h2></div>
@@ -181,6 +187,35 @@ int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a hre
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlOutputBufferCreateFilenameFunc"></a>Function type xmlOutputBufferCreateFilenameFunc</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateFilenameFunc (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br> int compression)<br>
+</pre>
+<p>Signature for the function doing the lookup for a suitable output method corresponding to an URI.</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>URI</tt></i>:</span></td>
+<td>the URI to write to</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>encoder</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>compression</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td>the new <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> in case of success or NULL if no method was found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlOutputCloseCallback"></a>Function type xmlOutputCloseCallback</h3>
<pre class="programlisting">int xmlOutputCloseCallback (void * context)<br>
</pre>
@@ -273,6 +308,31 @@ int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a hre
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlParserInputBufferCreateFilenameFunc"></a>Function type xmlParserInputBufferCreateFilenameFunc</h3>
+<pre class="programlisting"><a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateFilenameFunc (const char * URI, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br>
+</pre>
+<p>Signature for the function doing the lookup for a suitable input method corresponding to an URI.</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>URI</tt></i>:</span></td>
+<td>the URI to read from</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>enc</tt></i>:</span></td>
+<td>the requested source encoding</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td>the new <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in case of success or NULL if no method was found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlAllocOutputBuffer"></a>xmlAllocOutputBuffer ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlAllocOutputBuffer (<a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)<br>
</pre>
@@ -869,6 +929,27 @@ int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a hre
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlOutputBufferCreateFilenameDefault"></a>xmlOutputBufferCreateFilenameDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> xmlOutputBufferCreateFilenameDefault (<a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func)<br>
+</pre>
+<p>Registers a callback for URI output file handling</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td>function pointer to the new OutputBufferCreateFilenameFunc</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td>the old value of the registration function</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlOutputBufferCreateIO"></a>xmlOutputBufferCreateIO ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> xmlOutputBufferCreateIO (<a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br> <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br> void * ioctx, <br> <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)<br>
</pre>
@@ -1146,6 +1227,27 @@ int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a hre
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlParserInputBufferCreateFilenameDefault"></a>xmlParserInputBufferCreateFilenameDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> xmlParserInputBufferCreateFilenameDefault (<a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func)<br>
+</pre>
+<p>Registers a callback for URI input file handling</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td>function pointer to the new ParserInputBufferCreateFilenameFunc</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td>the old value of the registration function</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlParserInputBufferCreateIO"></a>xmlParserInputBufferCreateIO ()</h3>
<pre class="programlisting"><a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> xmlParserInputBufferCreateIO (<a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> ioread, <br> <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a> ioclose, <br> void * ioctx, <br> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc)<br>
</pre>
@@ -1442,6 +1544,48 @@ int <a href="#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a> (<a hre
</table></div>
</div>
<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefOutputBufferCreateFilenameDefault"></a>xmlThrDefOutputBufferCreateFilenameDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> xmlThrDefOutputBufferCreateFilenameDefault (<a href="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a> func)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefParserInputBufferCreateFilenameDefault"></a>xmlThrDefParserInputBufferCreateFilenameDefault ()</h3>
+<pre class="programlisting"><a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> xmlThrDefParserInputBufferCreateFilenameDefault (<a href="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a> func)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>func</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
</div>
</div>
</body>
diff --git a/doc/devhelp/libxml2-xmlerror.html b/doc/devhelp/libxml2-xmlerror.html
index b4d3a26b..678770f9 100644
--- a/doc/devhelp/libxml2-xmlerror.html
+++ b/doc/devhelp/libxml2-xmlerror.html
@@ -28,11 +28,11 @@ typedef enum <a href="#xmlErrorLevel">xmlErrorLevel</a>;
typedef <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * <a href="#xmlErrorPtr">xmlErrorPtr</a>;
typedef enum <a href="#xmlParserErrors">xmlParserErrors</a>;
void <a href="#initGenericErrorDefaultFunc">initGenericErrorDefaultFunc</a> (<a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> * handler);
-int <a href="#xmlCopyError">xmlCopyError</a> (<a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> from, <br> <a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> to);
-<a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> <a href="#xmlCtxtGetLastError">xmlCtxtGetLastError</a> (void * ctx);
+int <a href="#xmlCopyError">xmlCopyError</a> (const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * from, <br> <a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> to);
+const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * <a href="#xmlCtxtGetLastError">xmlCtxtGetLastError</a> (void * ctx);
void <a href="#xmlCtxtResetLastError">xmlCtxtResetLastError</a> (void * ctx);
typedef void <a href="#xmlGenericErrorFunc">xmlGenericErrorFunc</a> (void * ctx, <br> const char * msg, <br> ... ...);
-<a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> <a href="#xmlGetLastError">xmlGetLastError</a> (void);
+const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * <a href="#xmlGetLastError">xmlGetLastError</a> (void);
void <a href="#xmlParserError">xmlParserError</a> (void * ctx, <br> const char * msg, <br> ... ...);
void <a href="#xmlParserPrintFileContext">xmlParserPrintFileContext</a> (<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input);
void <a href="#xmlParserPrintFileInfo">xmlParserPrintFileInfo</a> (<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> input);
@@ -43,7 +43,9 @@ void <a href="#xmlResetError">xmlResetError</a> (<a href="libxml2-xmlerror.htm
void <a href="#xmlResetLastError">xmlResetLastError</a> (void);
void <a href="#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a> (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler);
void <a href="#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a> (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler);
-typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void * userData, <br> <a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> error);
+typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void * userData, <br> const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * error);
+void <a href="#xmlThrDefSetGenericErrorFunc">xmlThrDefSetGenericErrorFunc</a> (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler);
+void <a href="#xmlThrDefSetStructuredErrorFunc">xmlThrDefSetStructuredErrorFunc</a> (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler);
</pre>
</div>
<div class="refsect1" lang="en"><h2>Description</h2></div>
@@ -250,6 +252,7 @@ typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void
<a name="XML_ERR_NAME_TOO_LONG">XML_ERR_NAME_TOO_LONG</a> = 110 /* 110 */
<a name="XML_ERR_USER_STOP">XML_ERR_USER_STOP</a> = 111 /* 111 */
<a name="XML_ERR_COMMENT_ABRUPTLY_ENDED">XML_ERR_COMMENT_ABRUPTLY_ENDED</a> = 112 /* 112 */
+ <a name="XML_WAR_ENCODING_MISMATCH">XML_WAR_ENCODING_MISMATCH</a> = 113 /* 113 */
<a name="XML_NS_ERR_XML_NAMESPACE">XML_NS_ERR_XML_NAMESPACE</a> = 200
<a name="XML_NS_ERR_UNDEFINED_NAMESPACE">XML_NS_ERR_UNDEFINED_NAMESPACE</a> = 201 /* 201 */
<a name="XML_NS_ERR_QNAME">XML_NS_ERR_QNAME</a> = 202 /* 202 */
@@ -906,7 +909,7 @@ typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void
<div class="refsect2" lang="en">
<h3>
<a name="xmlStructuredErrorFunc"></a>Function type xmlStructuredErrorFunc</h3>
-<pre class="programlisting">void xmlStructuredErrorFunc (void * userData, <br> <a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> error)<br>
+<pre class="programlisting">void xmlStructuredErrorFunc (void * userData, <br> const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * error)<br>
</pre>
<p>Signature of the function to use when there is an error and the module handles the new error reporting mechanism.</p>
<div class="variablelist"><table border="0">
@@ -942,7 +945,7 @@ typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void
<div class="refsect2" lang="en">
<h3>
<a name="xmlCopyError"></a>xmlCopyError ()</h3>
-<pre class="programlisting">int xmlCopyError (<a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> from, <br> <a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> to)<br>
+<pre class="programlisting">int xmlCopyError (const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * from, <br> <a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> to)<br>
</pre>
<p>Save the original error to the new place.</p>
<div class="variablelist"><table border="0">
@@ -967,7 +970,7 @@ typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void
<div class="refsect2" lang="en">
<h3>
<a name="xmlCtxtGetLastError"></a>xmlCtxtGetLastError ()</h3>
-<pre class="programlisting"><a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> xmlCtxtGetLastError (void * ctx)<br>
+<pre class="programlisting">const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * xmlCtxtGetLastError (void * ctx)<br>
</pre>
<p>Get the last parsing error registered.</p>
<div class="variablelist"><table border="0">
@@ -1003,14 +1006,14 @@ typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void
<div class="refsect2" lang="en">
<h3>
<a name="xmlGetLastError"></a>xmlGetLastError ()</h3>
-<pre class="programlisting"><a href="libxml2-xmlerror.html#xmlErrorPtr">xmlErrorPtr</a> xmlGetLastError (void)<br>
+<pre class="programlisting">const <a href="libxml2-xmlerror.html#xmlError">xmlError</a> * xmlGetLastError (void)<br>
</pre>
<p>Get the last global error registered. This is per thread if compiled with thread support.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody><tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
-<td>NULL if no error occurred or a pointer to the error</td>
+<td>a pointer to the error</td>
</tr></tbody>
</table></div>
</div>
@@ -1210,6 +1213,48 @@ typedef void <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> (void
</table></div>
</div>
<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefSetGenericErrorFunc"></a>xmlThrDefSetGenericErrorFunc ()</h3>
+<pre class="programlisting">void xmlThrDefSetGenericErrorFunc (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> handler)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>handler</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefSetStructuredErrorFunc"></a>xmlThrDefSetStructuredErrorFunc ()</h3>
+<pre class="programlisting">void xmlThrDefSetStructuredErrorFunc (void * ctx, <br> <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> handler)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>ctx</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>handler</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
</div>
</div>
</body>
diff --git a/doc/devhelp/libxml2-xmlmemory.html b/doc/devhelp/libxml2-xmlmemory.html
index f663bb69..0a1198d5 100644
--- a/doc/devhelp/libxml2-xmlmemory.html
+++ b/doc/devhelp/libxml2-xmlmemory.html
@@ -22,12 +22,7 @@
<p>Author(s): Daniel Veillard </p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<pre class="synopsis">#define <a href="#DEBUG_MEMORY">DEBUG_MEMORY</a>;
-#define <a href="#xmlMalloc">xmlMalloc</a>;
-#define <a href="#xmlMallocAtomic">xmlMallocAtomic</a>;
-#define <a href="#xmlMemStrdup">xmlMemStrdup</a>;
-#define <a href="#xmlRealloc">xmlRealloc</a>;
-void <a href="#xmlCleanupMemory">xmlCleanupMemory</a> (void);
+<pre class="synopsis">void <a href="#xmlCleanupMemory">xmlCleanupMemory</a> (void);
typedef void <a href="#xmlFreeFunc">xmlFreeFunc</a> (void * mem);
int <a href="#xmlGcMemGet">xmlGcMemGet</a> (<a href="libxml2-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> * freeFunc, <br> <a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocFunc, <br> <a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> * mallocAtomicFunc, <br> <a href="libxml2-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> * reallocFunc, <br> <a href="libxml2-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> * strdupFunc);
int <a href="#xmlGcMemSetup">xmlGcMemSetup</a> (<a href="libxml2-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> freeFunc, <br> <a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocFunc, <br> <a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> mallocAtomicFunc, <br> <a href="libxml2-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> reallocFunc, <br> <a href="libxml2-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> strdupFunc);
@@ -60,14 +55,6 @@ typedef char * <a href="#xmlStrdupFunc">xmlStrdupFunc</a> (const char * str);
<div class="refsect2" lang="en">
<div class="refsect2" lang="en">
<h3>
-<a name="DEBUG_MEMORY">Macro </a>DEBUG_MEMORY</h3>
-<pre class="programlisting">#define <a href="#DEBUG_MEMORY">DEBUG_MEMORY</a>;
-</pre>
-<p><a href="libxml2-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a> replaces the allocator with a collect and debug shell to the libc allocator. <a href="libxml2-xmlmemory.html#DEBUG_MEMORY">DEBUG_MEMORY</a> should only be activated when debugging libxml i.e. if libxml has been configured with --with-debug-mem too. #define DEBUG_MEMORY_FREED #define <a href="libxml2-xmlversion.html#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a></p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
<a name="xmlFreeFunc"></a>Function type xmlFreeFunc</h3>
<pre class="programlisting">void xmlFreeFunc (void * mem)<br>
</pre>
@@ -150,6 +137,46 @@ typedef char * <a href="#xmlStrdupFunc">xmlStrdupFunc</a> (const char * str);
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlFree">Variable </a>xmlFree</h3>
+<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlFreeFunc">xmlFreeFunc</a> xmlFree;
+</pre>
+<p>@mem: an already allocated block of memory The variable holding the libxml free() implementation</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlMalloc">Variable </a>xmlMalloc</h3>
+<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMalloc;
+</pre>
+<p>@size: the size requested in bytes The variable holding the libxml malloc() implementation Returns a pointer to the newly allocated block or NULL in case of error</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlMallocAtomic">Variable </a>xmlMallocAtomic</h3>
+<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a> xmlMallocAtomic;
+</pre>
+<p>@size: the size requested in bytes The variable holding the libxml malloc() implementation for atomic data (i.e. blocks not containing pointers), useful when using a garbage collecting allocator. Returns a pointer to the newly allocated block or NULL in case of error</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlMemStrdup">Variable </a>xmlMemStrdup</h3>
+<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlStrdupFunc">xmlStrdupFunc</a> xmlMemStrdup;
+</pre>
+<p>@str: a zero terminated string The variable holding the libxml strdup() implementation Returns the copy of the string or NULL in case of error</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlRealloc">Variable </a>xmlRealloc</h3>
+<pre class="programlisting"><a href="libxml2-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a> xmlRealloc;
+</pre>
+<p>@mem: an already allocated block of memory @size: the new size requested in bytes The variable holding the libxml realloc() implementation Returns a pointer to the newly reallocated block or NULL in case of error</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlCleanupMemory"></a>xmlCleanupMemory ()</h3>
<pre class="programlisting">void xmlCleanupMemory (void)<br>
</pre>
diff --git a/doc/devhelp/libxml2-xmlreader.html b/doc/devhelp/libxml2-xmlreader.html
index bb012e6a..76b3a72a 100644
--- a/doc/devhelp/libxml2-xmlreader.html
+++ b/doc/devhelp/libxml2-xmlreader.html
@@ -109,6 +109,7 @@ int <a href="#xmlTextReaderRelaxNGValidateCtxt">xmlTextReaderRelaxNGValidateCtxt
int <a href="#xmlTextReaderSchemaValidate">xmlTextReaderSchemaValidate</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> const char * xsd);
int <a href="#xmlTextReaderSchemaValidateCtxt">xmlTextReaderSchemaValidateCtxt</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> <a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br> int options);
void <a href="#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> <a href="libxml2-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a> f, <br> void * arg);
+void <a href="#xmlTextReaderSetMaxAmplification">xmlTextReaderSetMaxAmplification</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> unsigned maxAmpl);
int <a href="#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> int prop, <br> int value);
int <a href="#xmlTextReaderSetSchema">xmlTextReaderSetSchema</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> <a href="libxml2-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema);
void <a href="#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a> (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> f, <br> void * arg);
@@ -2163,6 +2164,27 @@ The content of this structure is not made public by the API.
<hr>
<div class="refsect2" lang="en">
<h3>
+<a name="xmlTextReaderSetMaxAmplification"></a>xmlTextReaderSetMaxAmplification ()</h3>
+<pre class="programlisting">void xmlTextReaderSetMaxAmplification (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> unsigned maxAmpl)<br>
+</pre>
+<p>Set the maximum amplification factor. See <a href="libxml2-parser.html#xmlCtxtSetMaxAmplification">xmlCtxtSetMaxAmplification</a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>reader</tt></i>:</span></td>
+<td>an XML reader</td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>maxAmpl</tt></i>:</span></td>
+<td>maximum amplification factor</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
<a name="xmlTextReaderSetParserProp"></a>xmlTextReaderSetParserProp ()</h3>
<pre class="programlisting">int xmlTextReaderSetParserProp (<a href="libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> reader, <br> int prop, <br> int value)<br>
</pre>
diff --git a/doc/devhelp/libxml2-xmlsave.html b/doc/devhelp/libxml2-xmlsave.html
index fe2c2d22..21262758 100644
--- a/doc/devhelp/libxml2-xmlsave.html
+++ b/doc/devhelp/libxml2-xmlsave.html
@@ -35,6 +35,9 @@ int <a href="#xmlSaveSetEscape">xmlSaveSetEscape</a> (<a href="libxml2-xmlsave.
<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToFilename">xmlSaveToFilename</a> (const char * filename, <br> const char * encoding, <br> int options);
<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> <a href="#xmlSaveToIO">xmlSaveToIO</a> (<a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br> <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br> void * ioctx, <br> const char * encoding, <br> int options);
long <a href="#xmlSaveTree">xmlSaveTree</a> (<a href="libxml2-xmlsave.html#xmlSaveCtxtPtr">xmlSaveCtxtPtr</a> ctxt, <br> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
+int <a href="#xmlThrDefIndentTreeOutput">xmlThrDefIndentTreeOutput</a> (int v);
+int <a href="#xmlThrDefSaveNoEmptyTags">xmlThrDefSaveNoEmptyTags</a> (int v);
+const char * <a href="#xmlThrDefTreeIndentString">xmlThrDefTreeIndentString</a> (const char * v);
</pre>
</div>
<div class="refsect1" lang="en"><h2>Description</h2></div>
@@ -332,7 +335,7 @@ The content of this structure is not made public by the API.
</tr>
<tr>
<td><span class="term"><i><tt>cur</tt></i>:</span></td>
-<td></td>
+<td>the top node of the subtree to save</td>
</tr>
<tr>
<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
@@ -342,6 +345,69 @@ The content of this structure is not made public by the API.
</table></div>
</div>
<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefIndentTreeOutput"></a>xmlThrDefIndentTreeOutput ()</h3>
+<pre class="programlisting">int xmlThrDefIndentTreeOutput (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefSaveNoEmptyTags"></a>xmlThrDefSaveNoEmptyTags ()</h3>
+<pre class="programlisting">int xmlThrDefSaveNoEmptyTags (int v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<h3>
+<a name="xmlThrDefTreeIndentString"></a>xmlThrDefTreeIndentString ()</h3>
+<pre class="programlisting">const char * xmlThrDefTreeIndentString (const char * v)<br>
+</pre>
+<p></p>
+<div class="variablelist"><table border="0">
+<col align="left">
+<tbody>
+<tr>
+<td><span class="term"><i><tt>v</tt></i>:</span></td>
+<td></td>
+</tr>
+<tr>
+<td><span class="term"><i><tt>Returns</tt></i>:</span></td>
+<td></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
</div>
</div>
</body>
diff --git a/doc/devhelp/libxml2-xmlversion.html b/doc/devhelp/libxml2-xmlversion.html
index 7e202ac2..b7fc9c4b 100644
--- a/doc/devhelp/libxml2-xmlversion.html
+++ b/doc/devhelp/libxml2-xmlversion.html
@@ -22,10 +22,7 @@
<p>Author(s): Daniel Veillard </p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<pre class="synopsis">#define <a href="#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a>;
-#define <a href="#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a>;
-#define <a href="#LIBXML_ATTR_ALLOC_SIZE">LIBXML_ATTR_ALLOC_SIZE</a>;
-#define <a href="#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a>;
+<pre class="synopsis">#define <a href="#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a>;
#define <a href="#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a>;
#define <a href="#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a>;
#define <a href="#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a>;
@@ -77,14 +74,6 @@ void <a href="#xmlCheckVersion">xmlCheckVersion</a> (int version);
<div class="refsect2" lang="en">
<div class="refsect2" lang="en">
<h3>
-<a name="ATTRIBUTE_UNUSED">Macro </a>ATTRIBUTE_UNUSED</h3>
-<pre class="programlisting">#define <a href="#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a>;
-</pre>
-<p>Macro used to signal to GCC unused function parameters</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
<a name="DEBUG_MEMORY_LOCATION">Macro </a>DEBUG_MEMORY_LOCATION</h3>
<pre class="programlisting">#define <a href="#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a>;
</pre>
@@ -93,22 +82,6 @@ void <a href="#xmlCheckVersion">xmlCheckVersion</a> (int version);
<hr>
<div class="refsect2" lang="en">
<h3>
-<a name="LIBXML_ATTR_ALLOC_SIZE">Macro </a>LIBXML_ATTR_ALLOC_SIZE</h3>
-<pre class="programlisting">#define <a href="#LIBXML_ATTR_ALLOC_SIZE">LIBXML_ATTR_ALLOC_SIZE</a>;
-</pre>
-<p>Macro used to indicate to GCC this is an allocator function</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
-<a name="LIBXML_ATTR_FORMAT">Macro </a>LIBXML_ATTR_FORMAT</h3>
-<pre class="programlisting">#define <a href="#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a>;
-</pre>
-<p>Macro used to indicate to GCC the parameter are printf like</p>
-</div>
-<hr>
-<div class="refsect2" lang="en">
-<h3>
<a name="LIBXML_AUTOMATA_ENABLED">Macro </a>LIBXML_AUTOMATA_ENABLED</h3>
<pre class="programlisting">#define <a href="#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a>;
</pre>
diff --git a/doc/devhelp/libxml2-xpath.html b/doc/devhelp/libxml2-xpath.html
index 9a4c3069..59f96535 100644
--- a/doc/devhelp/libxml2-xpath.html
+++ b/doc/devhelp/libxml2-xpath.html
@@ -397,7 +397,7 @@ The content of this structure is not made public by the API.
<a href="libxml2-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp : the precompiled expression
int xptr : it this an XPointer expression
<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> ancestor : used for walking preceding axis
- int valueFrame : unused
+ int valueFrame : always zero for compatibility
} xmlXPathParserContext;
</pre>
<p></p>
@@ -1297,7 +1297,7 @@ The content of this structure is not made public by the API.
<a name="xmlXPathIsInf"></a>xmlXPathIsInf ()</h3>
<pre class="programlisting">int xmlXPathIsInf (double val)<br>
</pre>
-<p></p>
+<p>Checks whether a double is an infinity.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
@@ -1318,7 +1318,7 @@ The content of this structure is not made public by the API.
<a name="xmlXPathIsNaN"></a>xmlXPathIsNaN ()</h3>
<pre class="programlisting">int xmlXPathIsNaN (double val)<br>
</pre>
-<p></p>
+<p>Checks whether a double is a NaN.</p>
<div class="variablelist"><table border="0">
<col align="left">
<tbody>
diff --git a/doc/devhelp/libxml2.devhelp2 b/doc/devhelp/libxml2.devhelp2
index 1d9ec80b..b32ce27b 100644
--- a/doc/devhelp/libxml2.devhelp2
+++ b/doc/devhelp/libxml2.devhelp2
@@ -51,7 +51,6 @@
</sub>
</chapters>
<functions>
- <keyword type="macro" name="ATTRIBUTE_UNUSED" link="libxml2-xmlversion.html#ATTRIBUTE_UNUSED"/>
<keyword type="macro" name="BAD_CAST" link="libxml2-xmlstring.html#BAD_CAST"/>
<keyword type="macro" name="BASE_BUFFER_SIZE" link="libxml2-tree.html#BASE_BUFFER_SIZE"/>
<keyword type="macro" name="CAST_TO_BOOLEAN" link="libxml2-xpathInternals.html#CAST_TO_BOOLEAN"/>
@@ -62,7 +61,6 @@
<keyword type="macro" name="CHECK_ERROR0" link="libxml2-xpathInternals.html#CHECK_ERROR0"/>
<keyword type="macro" name="CHECK_TYPE" link="libxml2-xpathInternals.html#CHECK_TYPE"/>
<keyword type="macro" name="CHECK_TYPE0" link="libxml2-xpathInternals.html#CHECK_TYPE0"/>
- <keyword type="macro" name="DEBUG_MEMORY" link="libxml2-xmlmemory.html#DEBUG_MEMORY"/>
<keyword type="macro" name="DEBUG_MEMORY_LOCATION" link="libxml2-xmlversion.html#DEBUG_MEMORY_LOCATION"/>
<keyword type="macro" name="HTML_COMMENT_NODE" link="libxml2-HTMLtree.html#HTML_COMMENT_NODE"/>
<keyword type="macro" name="HTML_ENTITY_REF_NODE" link="libxml2-HTMLtree.html#HTML_ENTITY_REF_NODE"/>
@@ -91,8 +89,6 @@
<keyword type="macro" name="IS_PUBIDCHAR" link="libxml2-parserInternals.html#IS_PUBIDCHAR"/>
<keyword type="macro" name="IS_PUBIDCHAR_CH" link="libxml2-parserInternals.html#IS_PUBIDCHAR_CH"/>
<keyword type="macro" name="LIBXML2_NEW_BUFFER" link="libxml2-tree.html#LIBXML2_NEW_BUFFER"/>
- <keyword type="macro" name="LIBXML_ATTR_ALLOC_SIZE" link="libxml2-xmlversion.html#LIBXML_ATTR_ALLOC_SIZE"/>
- <keyword type="macro" name="LIBXML_ATTR_FORMAT" link="libxml2-xmlversion.html#LIBXML_ATTR_FORMAT"/>
<keyword type="macro" name="LIBXML_AUTOMATA_ENABLED" link="libxml2-xmlversion.html#LIBXML_AUTOMATA_ENABLED"/>
<keyword type="macro" name="LIBXML_C14N_ENABLED" link="libxml2-xmlversion.html#LIBXML_C14N_ENABLED"/>
<keyword type="macro" name="LIBXML_CATALOG_ENABLED" link="libxml2-xmlversion.html#LIBXML_CATALOG_ENABLED"/>
@@ -503,6 +499,12 @@
<keyword type="enum" name="XML_ELEMENT_TYPE_EMPTY" link="libxml2-tree.html#XML_ELEMENT_TYPE_EMPTY"/>
<keyword type="enum" name="XML_ELEMENT_TYPE_MIXED" link="libxml2-tree.html#XML_ELEMENT_TYPE_MIXED"/>
<keyword type="enum" name="XML_ELEMENT_TYPE_UNDEFINED" link="libxml2-tree.html#XML_ELEMENT_TYPE_UNDEFINED"/>
+ <keyword type="enum" name="XML_ENC_ERR_INPUT" link="libxml2-encoding.html#XML_ENC_ERR_INPUT"/>
+ <keyword type="enum" name="XML_ENC_ERR_INTERNAL" link="libxml2-encoding.html#XML_ENC_ERR_INTERNAL"/>
+ <keyword type="enum" name="XML_ENC_ERR_MEMORY" link="libxml2-encoding.html#XML_ENC_ERR_MEMORY"/>
+ <keyword type="enum" name="XML_ENC_ERR_PARTIAL" link="libxml2-encoding.html#XML_ENC_ERR_PARTIAL"/>
+ <keyword type="enum" name="XML_ENC_ERR_SPACE" link="libxml2-encoding.html#XML_ENC_ERR_SPACE"/>
+ <keyword type="enum" name="XML_ENC_ERR_SUCCESS" link="libxml2-encoding.html#XML_ENC_ERR_SUCCESS"/>
<keyword type="enum" name="XML_ENTITY_DECL" link="libxml2-tree.html#XML_ENTITY_DECL"/>
<keyword type="enum" name="XML_ENTITY_NODE" link="libxml2-tree.html#XML_ENTITY_NODE"/>
<keyword type="enum" name="XML_ENTITY_REF_NODE" link="libxml2-tree.html#XML_ENTITY_REF_NODE"/>
@@ -768,6 +770,7 @@
<keyword type="enum" name="XML_PARSER_SUBST_ENTITIES" link="libxml2-xmlreader.html#XML_PARSER_SUBST_ENTITIES"/>
<keyword type="enum" name="XML_PARSER_SYSTEM_LITERAL" link="libxml2-parser.html#XML_PARSER_SYSTEM_LITERAL"/>
<keyword type="enum" name="XML_PARSER_VALIDATE" link="libxml2-xmlreader.html#XML_PARSER_VALIDATE"/>
+ <keyword type="enum" name="XML_PARSER_XML_DECL" link="libxml2-parser.html#XML_PARSER_XML_DECL"/>
<keyword type="enum" name="XML_PARSE_BIG_LINES" link="libxml2-parser.html#XML_PARSE_BIG_LINES"/>
<keyword type="enum" name="XML_PARSE_COMPACT" link="libxml2-parser.html#XML_PARSE_COMPACT"/>
<keyword type="enum" name="XML_PARSE_DOM" link="libxml2-parser.html#XML_PARSE_DOM"/>
@@ -1418,6 +1421,7 @@
<keyword type="enum" name="XML_TREE_NOT_UTF8" link="libxml2-xmlerror.html#XML_TREE_NOT_UTF8"/>
<keyword type="enum" name="XML_TREE_UNTERMINATED_ENTITY" link="libxml2-xmlerror.html#XML_TREE_UNTERMINATED_ENTITY"/>
<keyword type="enum" name="XML_WAR_CATALOG_PI" link="libxml2-xmlerror.html#XML_WAR_CATALOG_PI"/>
+ <keyword type="enum" name="XML_WAR_ENCODING_MISMATCH" link="libxml2-xmlerror.html#XML_WAR_ENCODING_MISMATCH"/>
<keyword type="enum" name="XML_WAR_ENTITY_REDEFINED" link="libxml2-xmlerror.html#XML_WAR_ENTITY_REDEFINED"/>
<keyword type="enum" name="XML_WAR_LANG_VALUE" link="libxml2-xmlerror.html#XML_WAR_LANG_VALUE"/>
<keyword type="enum" name="XML_WAR_NS_COLUMN" link="libxml2-xmlerror.html#XML_WAR_NS_COLUMN"/>
@@ -1582,6 +1586,7 @@
<keyword type="typedef" name="xmlChRangeGroupPtr" link="libxml2-chvalid.html#xmlChRangeGroupPtr"/>
<keyword type="typedef" name="xmlChSRangePtr" link="libxml2-chvalid.html#xmlChSRangePtr"/>
<keyword type="typedef" name="xmlChar" link="libxml2-xmlstring.html#xmlChar"/>
+ <keyword type="typedef" name="xmlCharEncError" link="libxml2-encoding.html#xmlCharEncError"/>
<keyword type="typedef" name="xmlCharEncoding" link="libxml2-encoding.html#xmlCharEncoding"/>
<keyword type="typedef" name="xmlCharEncodingHandlerPtr" link="libxml2-encoding.html#xmlCharEncodingHandlerPtr"/>
<keyword type="typedef" name="xmlDOMWrapCtxtPtr" link="libxml2-tree.html#xmlDOMWrapCtxtPtr"/>
@@ -1704,6 +1709,7 @@
<keyword type="struct" name="htmlEntityDesc" link="libxml2-HTMLparser.html#htmlEntityDesc"/>
<keyword type="struct" name="xlinkHandler" link="libxml2-xlink.html#xlinkHandler"/>
<keyword type="struct" name="xmlAttr" link="libxml2-tree.html#xmlAttr"/>
+ <keyword type="struct" name="xmlAttrHashBucket" link="libxml2-parser.html#xmlAttrHashBucket"/>
<keyword type="struct" name="xmlAttribute" link="libxml2-tree.html#xmlAttribute"/>
<keyword type="struct" name="xmlAttributeTable" link="libxml2-valid.html#xmlAttributeTable"/>
<keyword type="struct" name="xmlAutomata" link="libxml2-xmlautomata.html#xmlAutomata"/>
@@ -1748,6 +1754,7 @@
<keyword type="struct" name="xmlParserInputBuffer" link="libxml2-tree.html#xmlParserInputBuffer"/>
<keyword type="struct" name="xmlParserNodeInfo" link="libxml2-parser.html#xmlParserNodeInfo"/>
<keyword type="struct" name="xmlParserNodeInfoSeq" link="libxml2-parser.html#xmlParserNodeInfoSeq"/>
+ <keyword type="struct" name="xmlParserNsData" link="libxml2-parser.html#xmlParserNsData"/>
<keyword type="struct" name="xmlPattern" link="libxml2-pattern.html#xmlPattern"/>
<keyword type="struct" name="xmlRMutex" link="libxml2-threads.html#xmlRMutex"/>
<keyword type="struct" name="xmlRef" link="libxml2-tree.html#xmlRef"/>
@@ -1838,7 +1845,7 @@
<keyword type="function" name="xmlCharEncodingInputFunc" link="libxml2-encoding.html#xmlCharEncodingInputFunc"/>
<keyword type="function" name="xmlCharEncodingOutputFunc" link="libxml2-encoding.html#xmlCharEncodingOutputFunc"/>
<keyword type="function" name="xmlDOMWrapAcquireNsFunction" link="libxml2-tree.html#xmlDOMWrapAcquireNsFunction"/>
- <keyword type="function" name="xmlDeregisterNodeFunc" link="libxml2-globals.html#xmlDeregisterNodeFunc"/>
+ <keyword type="function" name="xmlDeregisterNodeFunc" link="libxml2-tree.html#xmlDeregisterNodeFunc"/>
<keyword type="function" name="xmlEntityReferenceFunc" link="libxml2-parserInternals.html#xmlEntityReferenceFunc"/>
<keyword type="function" name="xmlExternalEntityLoader" link="libxml2-parser.html#xmlExternalEntityLoader"/>
<keyword type="function" name="xmlFreeFunc" link="libxml2-xmlmemory.html#xmlFreeFunc"/>
@@ -1855,16 +1862,16 @@
<keyword type="function" name="xmlListDeallocator" link="libxml2-list.html#xmlListDeallocator"/>
<keyword type="function" name="xmlListWalker" link="libxml2-list.html#xmlListWalker"/>
<keyword type="function" name="xmlMallocFunc" link="libxml2-xmlmemory.html#xmlMallocFunc"/>
- <keyword type="function" name="xmlOutputBufferCreateFilenameFunc" link="libxml2-globals.html#xmlOutputBufferCreateFilenameFunc"/>
+ <keyword type="function" name="xmlOutputBufferCreateFilenameFunc" link="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameFunc"/>
<keyword type="function" name="xmlOutputCloseCallback" link="libxml2-xmlIO.html#xmlOutputCloseCallback"/>
<keyword type="function" name="xmlOutputMatchCallback" link="libxml2-xmlIO.html#xmlOutputMatchCallback"/>
<keyword type="function" name="xmlOutputOpenCallback" link="libxml2-xmlIO.html#xmlOutputOpenCallback"/>
<keyword type="function" name="xmlOutputWriteCallback" link="libxml2-xmlIO.html#xmlOutputWriteCallback"/>
- <keyword type="function" name="xmlParserInputBufferCreateFilenameFunc" link="libxml2-globals.html#xmlParserInputBufferCreateFilenameFunc"/>
+ <keyword type="function" name="xmlParserInputBufferCreateFilenameFunc" link="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameFunc"/>
<keyword type="function" name="xmlParserInputDeallocate" link="libxml2-parser.html#xmlParserInputDeallocate"/>
<keyword type="function" name="xmlReallocFunc" link="libxml2-xmlmemory.html#xmlReallocFunc"/>
<keyword type="function" name="xmlRegExecCallbacks" link="libxml2-xmlregexp.html#xmlRegExecCallbacks"/>
- <keyword type="function" name="xmlRegisterNodeFunc" link="libxml2-globals.html#xmlRegisterNodeFunc"/>
+ <keyword type="function" name="xmlRegisterNodeFunc" link="libxml2-tree.html#xmlRegisterNodeFunc"/>
<keyword type="function" name="xmlRelaxNGValidityErrorFunc" link="libxml2-relaxng.html#xmlRelaxNGValidityErrorFunc"/>
<keyword type="function" name="xmlRelaxNGValidityWarningFunc" link="libxml2-relaxng.html#xmlRelaxNGValidityWarningFunc"/>
<keyword type="function" name="xmlSchemaValidityErrorFunc" link="libxml2-xmlschemas.html#xmlSchemaValidityErrorFunc"/>
@@ -1887,19 +1894,7 @@
<keyword type="function" name="xmlXPathVariableLookupFunc" link="libxml2-xpath.html#xmlXPathVariableLookupFunc"/>
<keyword type="macro" name="emptyExp" link="libxml2-xmlregexp.html#emptyExp"/>
<keyword type="macro" name="forbiddenExp" link="libxml2-xmlregexp.html#forbiddenExp"/>
- <keyword type="macro" name="htmlDefaultSAXHandler" link="libxml2-globals.html#htmlDefaultSAXHandler"/>
- <keyword type="macro" name="oldXMLWDcompatibility" link="libxml2-globals.html#oldXMLWDcompatibility"/>
- <keyword type="macro" name="xmlBufferAllocScheme" link="libxml2-globals.html#xmlBufferAllocScheme"/>
- <keyword type="macro" name="xmlDefaultBufferSize" link="libxml2-globals.html#xmlDefaultBufferSize"/>
- <keyword type="macro" name="xmlDefaultSAXHandler" link="libxml2-globals.html#xmlDefaultSAXHandler"/>
- <keyword type="macro" name="xmlDefaultSAXLocator" link="libxml2-globals.html#xmlDefaultSAXLocator"/>
- <keyword type="macro" name="xmlDeregisterNodeDefaultValue" link="libxml2-globals.html#xmlDeregisterNodeDefaultValue"/>
- <keyword type="macro" name="xmlDoValidityCheckingDefaultValue" link="libxml2-globals.html#xmlDoValidityCheckingDefaultValue"/>
- <keyword type="macro" name="xmlFree" link="libxml2-globals.html#xmlFree"/>
- <keyword type="macro" name="xmlGenericError" link="libxml2-globals.html#xmlGenericError"/>
- <keyword type="macro" name="xmlGenericErrorContext" link="libxml2-globals.html#xmlGenericErrorContext"/>
- <keyword type="macro" name="xmlGetWarningsDefaultValue" link="libxml2-globals.html#xmlGetWarningsDefaultValue"/>
- <keyword type="macro" name="xmlIndentTreeOutput" link="libxml2-globals.html#xmlIndentTreeOutput"/>
+ <keyword type="macro" name="xmlFree" link="libxml2-xmlmemory.html#xmlFree"/>
<keyword type="macro" name="xmlIsBaseCharGroup" link="libxml2-chvalid.html#xmlIsBaseCharGroup"/>
<keyword type="macro" name="xmlIsCharGroup" link="libxml2-chvalid.html#xmlIsCharGroup"/>
<keyword type="macro" name="xmlIsCombiningGroup" link="libxml2-chvalid.html#xmlIsCombiningGroup"/>
@@ -1907,29 +1902,15 @@
<keyword type="macro" name="xmlIsExtenderGroup" link="libxml2-chvalid.html#xmlIsExtenderGroup"/>
<keyword type="macro" name="xmlIsIdeographicGroup" link="libxml2-chvalid.html#xmlIsIdeographicGroup"/>
<keyword type="macro" name="xmlIsPubidChar_tab" link="libxml2-chvalid.html#xmlIsPubidChar_tab"/>
- <keyword type="macro" name="xmlKeepBlanksDefaultValue" link="libxml2-globals.html#xmlKeepBlanksDefaultValue"/>
- <keyword type="macro" name="xmlLastError" link="libxml2-globals.html#xmlLastError"/>
- <keyword type="macro" name="xmlLineNumbersDefaultValue" link="libxml2-globals.html#xmlLineNumbersDefaultValue"/>
- <keyword type="macro" name="xmlLoadExtDtdDefaultValue" link="libxml2-globals.html#xmlLoadExtDtdDefaultValue"/>
- <keyword type="macro" name="xmlMalloc" link="libxml2-globals.html#xmlMalloc"/>
- <keyword type="macro" name="xmlMallocAtomic" link="libxml2-globals.html#xmlMallocAtomic"/>
- <keyword type="macro" name="xmlMemStrdup" link="libxml2-globals.html#xmlMemStrdup"/>
- <keyword type="macro" name="xmlOutputBufferCreateFilenameValue" link="libxml2-globals.html#xmlOutputBufferCreateFilenameValue"/>
- <keyword type="macro" name="xmlParserDebugEntities" link="libxml2-globals.html#xmlParserDebugEntities"/>
- <keyword type="macro" name="xmlParserInputBufferCreateFilenameValue" link="libxml2-globals.html#xmlParserInputBufferCreateFilenameValue"/>
+ <keyword type="macro" name="xmlMalloc" link="libxml2-xmlmemory.html#xmlMalloc"/>
+ <keyword type="macro" name="xmlMallocAtomic" link="libxml2-xmlmemory.html#xmlMallocAtomic"/>
+ <keyword type="macro" name="xmlMemStrdup" link="libxml2-xmlmemory.html#xmlMemStrdup"/>
<keyword type="macro" name="xmlParserMaxDepth" link="libxml2-parserInternals.html#xmlParserMaxDepth"/>
- <keyword type="macro" name="xmlParserVersion" link="libxml2-globals.html#xmlParserVersion"/>
- <keyword type="macro" name="xmlPedanticParserDefaultValue" link="libxml2-globals.html#xmlPedanticParserDefaultValue"/>
- <keyword type="macro" name="xmlRealloc" link="libxml2-globals.html#xmlRealloc"/>
- <keyword type="macro" name="xmlRegisterNodeDefaultValue" link="libxml2-globals.html#xmlRegisterNodeDefaultValue"/>
- <keyword type="macro" name="xmlSaveNoEmptyTags" link="libxml2-globals.html#xmlSaveNoEmptyTags"/>
+ <keyword type="macro" name="xmlParserVersion" link="libxml2-parser.html#xmlParserVersion"/>
+ <keyword type="macro" name="xmlRealloc" link="libxml2-xmlmemory.html#xmlRealloc"/>
<keyword type="macro" name="xmlStringComment" link="libxml2-parserInternals.html#xmlStringComment"/>
<keyword type="macro" name="xmlStringText" link="libxml2-parserInternals.html#xmlStringText"/>
<keyword type="macro" name="xmlStringTextNoenc" link="libxml2-parserInternals.html#xmlStringTextNoenc"/>
- <keyword type="macro" name="xmlStructuredError" link="libxml2-globals.html#xmlStructuredError"/>
- <keyword type="macro" name="xmlStructuredErrorContext" link="libxml2-globals.html#xmlStructuredErrorContext"/>
- <keyword type="macro" name="xmlSubstituteEntitiesDefaultValue" link="libxml2-globals.html#xmlSubstituteEntitiesDefaultValue"/>
- <keyword type="macro" name="xmlTreeIndentString" link="libxml2-globals.html#xmlTreeIndentString"/>
<keyword type="macro" name="xmlXPathNAN" link="libxml2-xpath.html#xmlXPathNAN"/>
<keyword type="macro" name="xmlXPathNINF" link="libxml2-xpath.html#xmlXPathNINF"/>
<keyword type="macro" name="xmlXPathPINF" link="libxml2-xpath.html#xmlXPathPINF"/>
@@ -2151,6 +2132,7 @@
<keyword type="function" name="xmlCheckFilename ()" link="libxml2-xmlIO.html#xmlCheckFilename"/>
<keyword type="function" name="xmlCheckHTTPInput ()" link="libxml2-xmlIO.html#xmlCheckHTTPInput"/>
<keyword type="function" name="xmlCheckLanguageID ()" link="libxml2-parserInternals.html#xmlCheckLanguageID"/>
+ <keyword type="function" name="xmlCheckThreadLocalStorage ()" link="libxml2-threads.html#xmlCheckThreadLocalStorage"/>
<keyword type="function" name="xmlCheckUTF8 ()" link="libxml2-xmlstring.html#xmlCheckUTF8"/>
<keyword type="function" name="xmlCheckVersion ()" link="libxml2-xmlversion.html#xmlCheckVersion"/>
<keyword type="function" name="xmlChildElementCount ()" link="libxml2-tree.html#xmlChildElementCount"/>
@@ -2204,6 +2186,7 @@
<keyword type="function" name="xmlCtxtReset ()" link="libxml2-parser.html#xmlCtxtReset"/>
<keyword type="function" name="xmlCtxtResetLastError ()" link="libxml2-xmlerror.html#xmlCtxtResetLastError"/>
<keyword type="function" name="xmlCtxtResetPush ()" link="libxml2-parser.html#xmlCtxtResetPush"/>
+ <keyword type="function" name="xmlCtxtSetMaxAmplification ()" link="libxml2-parser.html#xmlCtxtSetMaxAmplification"/>
<keyword type="function" name="xmlCtxtUseOptions ()" link="libxml2-parser.html#xmlCtxtUseOptions"/>
<keyword type="function" name="xmlCurrentChar ()" link="libxml2-parserInternals.html#xmlCurrentChar"/>
<keyword type="function" name="xmlDOMWrapAdoptNode ()" link="libxml2-tree.html#xmlDOMWrapAdoptNode"/>
@@ -2226,7 +2209,7 @@
<keyword type="function" name="xmlDecodeEntities ()" link="libxml2-parserInternals.html#xmlDecodeEntities"/>
<keyword type="function" name="xmlDefaultSAXHandlerInit ()" link="libxml2-SAX2.html#xmlDefaultSAXHandlerInit"/>
<keyword type="function" name="xmlDelEncodingAlias ()" link="libxml2-encoding.html#xmlDelEncodingAlias"/>
- <keyword type="function" name="xmlDeregisterNodeDefault ()" link="libxml2-globals.html#xmlDeregisterNodeDefault"/>
+ <keyword type="function" name="xmlDeregisterNodeDefault ()" link="libxml2-tree.html#xmlDeregisterNodeDefault"/>
<keyword type="function" name="xmlDetectCharEncoding ()" link="libxml2-encoding.html#xmlDetectCharEncoding"/>
<keyword type="function" name="xmlDictCleanup ()" link="libxml2-dict.html#xmlDictCleanup"/>
<keyword type="function" name="xmlDictCreate ()" link="libxml2-dict.html#xmlDictCreate"/>
@@ -2296,6 +2279,7 @@
<keyword type="function" name="xmlFreeElementContent ()" link="libxml2-valid.html#xmlFreeElementContent"/>
<keyword type="function" name="xmlFreeElementTable ()" link="libxml2-valid.html#xmlFreeElementTable"/>
<keyword type="function" name="xmlFreeEntitiesTable ()" link="libxml2-entities.html#xmlFreeEntitiesTable"/>
+ <keyword type="function" name="xmlFreeEntity ()" link="libxml2-entities.html#xmlFreeEntity"/>
<keyword type="function" name="xmlFreeEnumeration ()" link="libxml2-valid.html#xmlFreeEnumeration"/>
<keyword type="function" name="xmlFreeIDTable ()" link="libxml2-valid.html#xmlFreeIDTable"/>
<keyword type="function" name="xmlFreeInputStream ()" link="libxml2-parserInternals.html#xmlFreeInputStream"/>
@@ -2336,7 +2320,7 @@
<keyword type="function" name="xmlGetExternalEntityLoader ()" link="libxml2-parser.html#xmlGetExternalEntityLoader"/>
<keyword type="function" name="xmlGetFeature ()" link="libxml2-parser.html#xmlGetFeature"/>
<keyword type="function" name="xmlGetFeaturesList ()" link="libxml2-parser.html#xmlGetFeaturesList"/>
- <keyword type="function" name="xmlGetGlobalState ()" link="libxml2-threads.html#xmlGetGlobalState"/>
+ <keyword type="function" name="xmlGetGlobalState ()" link="libxml2-globals.html#xmlGetGlobalState"/>
<keyword type="function" name="xmlGetID ()" link="libxml2-valid.html#xmlGetID"/>
<keyword type="function" name="xmlGetIntSubset ()" link="libxml2-tree.html#xmlGetIntSubset"/>
<keyword type="function" name="xmlGetLastChild ()" link="libxml2-tree.html#xmlGetLastChild"/>
@@ -2597,7 +2581,7 @@
<keyword type="function" name="xmlOutputBufferCreateFd ()" link="libxml2-xmlIO.html#xmlOutputBufferCreateFd"/>
<keyword type="function" name="xmlOutputBufferCreateFile ()" link="libxml2-xmlIO.html#xmlOutputBufferCreateFile"/>
<keyword type="function" name="xmlOutputBufferCreateFilename ()" link="libxml2-xmlIO.html#xmlOutputBufferCreateFilename"/>
- <keyword type="function" name="xmlOutputBufferCreateFilenameDefault ()" link="libxml2-globals.html#xmlOutputBufferCreateFilenameDefault"/>
+ <keyword type="function" name="xmlOutputBufferCreateFilenameDefault ()" link="libxml2-xmlIO.html#xmlOutputBufferCreateFilenameDefault"/>
<keyword type="function" name="xmlOutputBufferCreateIO ()" link="libxml2-xmlIO.html#xmlOutputBufferCreateIO"/>
<keyword type="function" name="xmlOutputBufferFlush ()" link="libxml2-xmlIO.html#xmlOutputBufferFlush"/>
<keyword type="function" name="xmlOutputBufferGetContent ()" link="libxml2-xmlIO.html#xmlOutputBufferGetContent"/>
@@ -2679,7 +2663,7 @@
<keyword type="function" name="xmlParserInputBufferCreateFd ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateFd"/>
<keyword type="function" name="xmlParserInputBufferCreateFile ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateFile"/>
<keyword type="function" name="xmlParserInputBufferCreateFilename ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateFilename"/>
- <keyword type="function" name="xmlParserInputBufferCreateFilenameDefault ()" link="libxml2-globals.html#xmlParserInputBufferCreateFilenameDefault"/>
+ <keyword type="function" name="xmlParserInputBufferCreateFilenameDefault ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateFilenameDefault"/>
<keyword type="function" name="xmlParserInputBufferCreateIO ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateIO"/>
<keyword type="function" name="xmlParserInputBufferCreateMem ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateMem"/>
<keyword type="function" name="xmlParserInputBufferCreateStatic ()" link="libxml2-xmlIO.html#xmlParserInputBufferCreateStatic"/>
@@ -2749,7 +2733,7 @@
<keyword type="function" name="xmlRegisterDefaultOutputCallbacks ()" link="libxml2-xmlIO.html#xmlRegisterDefaultOutputCallbacks"/>
<keyword type="function" name="xmlRegisterHTTPPostCallbacks ()" link="libxml2-xmlIO.html#xmlRegisterHTTPPostCallbacks"/>
<keyword type="function" name="xmlRegisterInputCallbacks ()" link="libxml2-xmlIO.html#xmlRegisterInputCallbacks"/>
- <keyword type="function" name="xmlRegisterNodeDefault ()" link="libxml2-globals.html#xmlRegisterNodeDefault"/>
+ <keyword type="function" name="xmlRegisterNodeDefault ()" link="libxml2-tree.html#xmlRegisterNodeDefault"/>
<keyword type="function" name="xmlRegisterOutputCallbacks ()" link="libxml2-xmlIO.html#xmlRegisterOutputCallbacks"/>
<keyword type="function" name="xmlRelaxNGCleanupTypes ()" link="libxml2-relaxng.html#xmlRelaxNGCleanupTypes"/>
<keyword type="function" name="xmlRelaxNGDump ()" link="libxml2-relaxng.html#xmlRelaxNGDump"/>
@@ -3050,6 +3034,7 @@
<keyword type="function" name="xmlTextReaderSchemaValidate ()" link="libxml2-xmlreader.html#xmlTextReaderSchemaValidate"/>
<keyword type="function" name="xmlTextReaderSchemaValidateCtxt ()" link="libxml2-xmlreader.html#xmlTextReaderSchemaValidateCtxt"/>
<keyword type="function" name="xmlTextReaderSetErrorHandler ()" link="libxml2-xmlreader.html#xmlTextReaderSetErrorHandler"/>
+ <keyword type="function" name="xmlTextReaderSetMaxAmplification ()" link="libxml2-xmlreader.html#xmlTextReaderSetMaxAmplification"/>
<keyword type="function" name="xmlTextReaderSetParserProp ()" link="libxml2-xmlreader.html#xmlTextReaderSetParserProp"/>
<keyword type="function" name="xmlTextReaderSetSchema ()" link="libxml2-xmlreader.html#xmlTextReaderSetSchema"/>
<keyword type="function" name="xmlTextReaderSetStructuredErrorHandler ()" link="libxml2-xmlreader.html#xmlTextReaderSetStructuredErrorHandler"/>
@@ -3130,25 +3115,25 @@
<keyword type="function" name="xmlTextWriterWriteVFormatPI ()" link="libxml2-xmlwriter.html#xmlTextWriterWriteVFormatPI"/>
<keyword type="function" name="xmlTextWriterWriteVFormatRaw ()" link="libxml2-xmlwriter.html#xmlTextWriterWriteVFormatRaw"/>
<keyword type="function" name="xmlTextWriterWriteVFormatString ()" link="libxml2-xmlwriter.html#xmlTextWriterWriteVFormatString"/>
- <keyword type="function" name="xmlThrDefBufferAllocScheme ()" link="libxml2-globals.html#xmlThrDefBufferAllocScheme"/>
- <keyword type="function" name="xmlThrDefDefaultBufferSize ()" link="libxml2-globals.html#xmlThrDefDefaultBufferSize"/>
- <keyword type="function" name="xmlThrDefDeregisterNodeDefault ()" link="libxml2-globals.html#xmlThrDefDeregisterNodeDefault"/>
- <keyword type="function" name="xmlThrDefDoValidityCheckingDefaultValue ()" link="libxml2-globals.html#xmlThrDefDoValidityCheckingDefaultValue"/>
- <keyword type="function" name="xmlThrDefGetWarningsDefaultValue ()" link="libxml2-globals.html#xmlThrDefGetWarningsDefaultValue"/>
- <keyword type="function" name="xmlThrDefIndentTreeOutput ()" link="libxml2-globals.html#xmlThrDefIndentTreeOutput"/>
- <keyword type="function" name="xmlThrDefKeepBlanksDefaultValue ()" link="libxml2-globals.html#xmlThrDefKeepBlanksDefaultValue"/>
- <keyword type="function" name="xmlThrDefLineNumbersDefaultValue ()" link="libxml2-globals.html#xmlThrDefLineNumbersDefaultValue"/>
- <keyword type="function" name="xmlThrDefLoadExtDtdDefaultValue ()" link="libxml2-globals.html#xmlThrDefLoadExtDtdDefaultValue"/>
- <keyword type="function" name="xmlThrDefOutputBufferCreateFilenameDefault ()" link="libxml2-globals.html#xmlThrDefOutputBufferCreateFilenameDefault"/>
- <keyword type="function" name="xmlThrDefParserDebugEntities ()" link="libxml2-globals.html#xmlThrDefParserDebugEntities"/>
- <keyword type="function" name="xmlThrDefParserInputBufferCreateFilenameDefault ()" link="libxml2-globals.html#xmlThrDefParserInputBufferCreateFilenameDefault"/>
- <keyword type="function" name="xmlThrDefPedanticParserDefaultValue ()" link="libxml2-globals.html#xmlThrDefPedanticParserDefaultValue"/>
- <keyword type="function" name="xmlThrDefRegisterNodeDefault ()" link="libxml2-globals.html#xmlThrDefRegisterNodeDefault"/>
- <keyword type="function" name="xmlThrDefSaveNoEmptyTags ()" link="libxml2-globals.html#xmlThrDefSaveNoEmptyTags"/>
- <keyword type="function" name="xmlThrDefSetGenericErrorFunc ()" link="libxml2-globals.html#xmlThrDefSetGenericErrorFunc"/>
- <keyword type="function" name="xmlThrDefSetStructuredErrorFunc ()" link="libxml2-globals.html#xmlThrDefSetStructuredErrorFunc"/>
- <keyword type="function" name="xmlThrDefSubstituteEntitiesDefaultValue ()" link="libxml2-globals.html#xmlThrDefSubstituteEntitiesDefaultValue"/>
- <keyword type="function" name="xmlThrDefTreeIndentString ()" link="libxml2-globals.html#xmlThrDefTreeIndentString"/>
+ <keyword type="function" name="xmlThrDefBufferAllocScheme ()" link="libxml2-tree.html#xmlThrDefBufferAllocScheme"/>
+ <keyword type="function" name="xmlThrDefDefaultBufferSize ()" link="libxml2-tree.html#xmlThrDefDefaultBufferSize"/>
+ <keyword type="function" name="xmlThrDefDeregisterNodeDefault ()" link="libxml2-tree.html#xmlThrDefDeregisterNodeDefault"/>
+ <keyword type="function" name="xmlThrDefDoValidityCheckingDefaultValue ()" link="libxml2-parser.html#xmlThrDefDoValidityCheckingDefaultValue"/>
+ <keyword type="function" name="xmlThrDefGetWarningsDefaultValue ()" link="libxml2-parser.html#xmlThrDefGetWarningsDefaultValue"/>
+ <keyword type="function" name="xmlThrDefIndentTreeOutput ()" link="libxml2-xmlsave.html#xmlThrDefIndentTreeOutput"/>
+ <keyword type="function" name="xmlThrDefKeepBlanksDefaultValue ()" link="libxml2-parser.html#xmlThrDefKeepBlanksDefaultValue"/>
+ <keyword type="function" name="xmlThrDefLineNumbersDefaultValue ()" link="libxml2-parser.html#xmlThrDefLineNumbersDefaultValue"/>
+ <keyword type="function" name="xmlThrDefLoadExtDtdDefaultValue ()" link="libxml2-parser.html#xmlThrDefLoadExtDtdDefaultValue"/>
+ <keyword type="function" name="xmlThrDefOutputBufferCreateFilenameDefault ()" link="libxml2-xmlIO.html#xmlThrDefOutputBufferCreateFilenameDefault"/>
+ <keyword type="function" name="xmlThrDefParserDebugEntities ()" link="libxml2-parser.html#xmlThrDefParserDebugEntities"/>
+ <keyword type="function" name="xmlThrDefParserInputBufferCreateFilenameDefault ()" link="libxml2-xmlIO.html#xmlThrDefParserInputBufferCreateFilenameDefault"/>
+ <keyword type="function" name="xmlThrDefPedanticParserDefaultValue ()" link="libxml2-parser.html#xmlThrDefPedanticParserDefaultValue"/>
+ <keyword type="function" name="xmlThrDefRegisterNodeDefault ()" link="libxml2-tree.html#xmlThrDefRegisterNodeDefault"/>
+ <keyword type="function" name="xmlThrDefSaveNoEmptyTags ()" link="libxml2-xmlsave.html#xmlThrDefSaveNoEmptyTags"/>
+ <keyword type="function" name="xmlThrDefSetGenericErrorFunc ()" link="libxml2-xmlerror.html#xmlThrDefSetGenericErrorFunc"/>
+ <keyword type="function" name="xmlThrDefSetStructuredErrorFunc ()" link="libxml2-xmlerror.html#xmlThrDefSetStructuredErrorFunc"/>
+ <keyword type="function" name="xmlThrDefSubstituteEntitiesDefaultValue ()" link="libxml2-parser.html#xmlThrDefSubstituteEntitiesDefaultValue"/>
+ <keyword type="function" name="xmlThrDefTreeIndentString ()" link="libxml2-xmlsave.html#xmlThrDefTreeIndentString"/>
<keyword type="function" name="xmlUCSIsAegeanNumbers ()" link="libxml2-xmlunicode.html#xmlUCSIsAegeanNumbers"/>
<keyword type="function" name="xmlUCSIsAlphabeticPresentationForms ()" link="libxml2-xmlunicode.html#xmlUCSIsAlphabeticPresentationForms"/>
<keyword type="function" name="xmlUCSIsArabic ()" link="libxml2-xmlunicode.html#xmlUCSIsArabic"/>
diff --git a/doc/examples/examples.xml b/doc/examples/examples.xml
index 177e8159..0cf0f2b8 100644
--- a/doc/examples/examples.xml
+++ b/doc/examples/examples.xml
@@ -8,19 +8,19 @@
<copy>see Copyright for the status of this software. </copy>
<section>InputOutput</section>
<includes>
- <include line='16'>&lt;libxml/parser.h&gt;</include>
- <include line='17'>&lt;libxml/tree.h&gt;</include>
- <include line='18'>&lt;libxml/xinclude.h&gt;</include>
- <include line='19'>&lt;libxml/xmlIO.h&gt;</include>
+ <include line='17'>&lt;libxml/parser.h&gt;</include>
+ <include line='18'>&lt;libxml/tree.h&gt;</include>
+ <include line='19'>&lt;libxml/xinclude.h&gt;</include>
+ <include line='20'>&lt;libxml/xmlIO.h&gt;</include>
</includes>
<uses>
- <macro line='117' file='xmlversion' name='LIBXML_TEST_VERSION'/>
- <function line='143' file='tree' name='xmlDocDump'/>
- <typedef line='105' file='tree' name='xmlDocPtr'/>
- <function line='149' file='tree' name='xmlFreeDoc'/>
- <function line='124' file='parser' name='xmlReadMemory'/>
- <function line='117' file='xmlIO' name='xmlRegisterInputCallbacks'/>
- <function line='134' file='xinclude' name='xmlXIncludeProcess'/>
+ <macro line='118' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+ <function line='144' file='tree' name='xmlDocDump'/>
+ <typedef line='106' file='tree' name='xmlDocPtr'/>
+ <function line='150' file='tree' name='xmlFreeDoc'/>
+ <function line='125' file='parser' name='xmlReadMemory'/>
+ <function line='118' file='xmlIO' name='xmlRegisterInputCallbacks'/>
+ <function line='135' file='xinclude' name='xmlXIncludeProcess'/>
</uses>
</example>
<example filename='io2.c'>
@@ -38,7 +38,7 @@
<function line='36' file='tree' name='xmlDocDumpFormatMemory'/>
<typedef line='20' file='tree' name='xmlDocPtr'/>
<function line='30' file='tree' name='xmlDocSetRootElement'/>
- <variable line='42' file='globals' name='xmlFree'/>
+ <variable line='42' file='xmlmemory' name='xmlFree'/>
<function line='43' file='tree' name='xmlFreeDoc'/>
<function line='27' file='tree' name='xmlNewDoc'/>
<function line='28' file='tree' name='xmlNewDocNode'/>
@@ -164,24 +164,25 @@
<copy>see Copyright for the status of this software. </copy>
<section>xmlReader</section>
<includes>
+ <include line='17'>&lt;libxml/parser.h&gt;</include>
<include line='16'>&lt;libxml/xmlreader.h&gt;</include>
</includes>
<uses>
- <enum line='69' file='parser' name='XML_PARSE_DTDATTR'/>
- <enum line='71' file='parser' name='XML_PARSE_DTDVALID'/>
- <enum line='70' file='parser' name='XML_PARSE_NOENT'/>
- <function line='84' file='xmlreader' name='xmlFreeTextReader'/>
- <function line='68' file='xmlreader' name='xmlReaderForFile'/>
- <function line='45' file='xmlstring' name='xmlStrlen'/>
- <function line='30' file='xmlreader' name='xmlTextReaderConstName'/>
- <function line='34' file='xmlreader' name='xmlTextReaderConstValue'/>
- <function line='37' file='xmlreader' name='xmlTextReaderDepth'/>
- <function line='41' file='xmlreader' name='xmlTextReaderHasValue'/>
- <function line='40' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
- <function line='81' file='xmlreader' name='xmlTextReaderIsValid'/>
- <function line='38' file='xmlreader' name='xmlTextReaderNodeType'/>
- <typedef line='60' file='xmlreader' name='xmlTextReaderPtr'/>
- <function line='73' file='xmlreader' name='xmlTextReaderRead'/>
+ <enum line='70' file='parser' name='XML_PARSE_DTDATTR'/>
+ <enum line='72' file='parser' name='XML_PARSE_DTDVALID'/>
+ <enum line='71' file='parser' name='XML_PARSE_NOENT'/>
+ <function line='85' file='xmlreader' name='xmlFreeTextReader'/>
+ <function line='69' file='xmlreader' name='xmlReaderForFile'/>
+ <function line='46' file='xmlstring' name='xmlStrlen'/>
+ <function line='31' file='xmlreader' name='xmlTextReaderConstName'/>
+ <function line='35' file='xmlreader' name='xmlTextReaderConstValue'/>
+ <function line='38' file='xmlreader' name='xmlTextReaderDepth'/>
+ <function line='42' file='xmlreader' name='xmlTextReaderHasValue'/>
+ <function line='41' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
+ <function line='82' file='xmlreader' name='xmlTextReaderIsValid'/>
+ <function line='39' file='xmlreader' name='xmlTextReaderNodeType'/>
+ <typedef line='61' file='xmlreader' name='xmlTextReaderPtr'/>
+ <function line='74' file='xmlreader' name='xmlTextReaderRead'/>
</uses>
</example>
<example filename='reader3.c'>
@@ -235,38 +236,39 @@
<section>xmlWriter</section>
<includes>
<include line='16'>&lt;libxml/encoding.h&gt;</include>
+ <include line='18'>&lt;libxml/parser.h&gt;</include>
<include line='17'>&lt;libxml/xmlwriter.h&gt;</include>
</includes>
<uses>
- <macro line='877' file='parser' name='XML_DEFAULT_VERSION'/>
- <function line='339' file='tree' name='xmlBufferCreate'/>
- <function line='605' file='tree' name='xmlBufferFree'/>
- <typedef line='333' file='tree' name='xmlBufferPtr'/>
- <typedef line='1143' file='encoding' name='xmlCharEncodingHandlerPtr'/>
- <function line='893' file='tree' name='xmlDocSetRootElement'/>
- <function line='1148' file='encoding' name='xmlFindCharEncodingHandler'/>
- <variable line='105' file='globals' name='xmlFree'/>
- <function line='319' file='xmlwriter' name='xmlFreeTextWriter'/>
- <variable line='1158' file='globals' name='xmlMalloc'/>
- <function line='877' file='tree' name='xmlNewDoc'/>
- <function line='886' file='tree' name='xmlNewDocNode'/>
- <function line='624' file='xmlwriter' name='xmlNewTextWriterDoc'/>
- <function line='68' file='xmlwriter' name='xmlNewTextWriterFilename'/>
- <function line='347' file='xmlwriter' name='xmlNewTextWriterMemory'/>
- <function line='896' file='xmlwriter' name='xmlNewTextWriterTree'/>
- <typedef line='872' file='tree' name='xmlNodePtr'/>
- <variable line='1175' file='globals' name='xmlRealloc'/>
- <function line='855' file='tree' name='xmlSaveFileEnc'/>
- <function line='312' file='xmlwriter' name='xmlTextWriterEndDocument'/>
- <function line='192' file='xmlwriter' name='xmlTextWriterEndElement'/>
- <typedef line='64' file='xmlwriter' name='xmlTextWriterPtr'/>
- <function line='77' file='xmlwriter' name='xmlTextWriterStartDocument'/>
- <function line='86' file='xmlwriter' name='xmlTextWriterStartElement'/>
- <function line='116' file='xmlwriter' name='xmlTextWriterWriteAttribute'/>
- <function line='99' file='xmlwriter' name='xmlTextWriterWriteComment'/>
- <function line='173' file='xmlwriter' name='xmlTextWriterWriteElement'/>
- <function line='135' file='xmlwriter' name='xmlTextWriterWriteFormatComment'/>
- <function line='154' file='xmlwriter' name='xmlTextWriterWriteFormatElement'/>
+ <macro line='878' file='parser' name='XML_DEFAULT_VERSION'/>
+ <function line='340' file='tree' name='xmlBufferCreate'/>
+ <function line='606' file='tree' name='xmlBufferFree'/>
+ <typedef line='334' file='tree' name='xmlBufferPtr'/>
+ <typedef line='1144' file='encoding' name='xmlCharEncodingHandlerPtr'/>
+ <function line='894' file='tree' name='xmlDocSetRootElement'/>
+ <function line='1149' file='encoding' name='xmlFindCharEncodingHandler'/>
+ <variable line='106' file='xmlmemory' name='xmlFree'/>
+ <function line='320' file='xmlwriter' name='xmlFreeTextWriter'/>
+ <variable line='1159' file='xmlmemory' name='xmlMalloc'/>
+ <function line='878' file='tree' name='xmlNewDoc'/>
+ <function line='887' file='tree' name='xmlNewDocNode'/>
+ <function line='625' file='xmlwriter' name='xmlNewTextWriterDoc'/>
+ <function line='69' file='xmlwriter' name='xmlNewTextWriterFilename'/>
+ <function line='348' file='xmlwriter' name='xmlNewTextWriterMemory'/>
+ <function line='897' file='xmlwriter' name='xmlNewTextWriterTree'/>
+ <typedef line='873' file='tree' name='xmlNodePtr'/>
+ <variable line='1176' file='xmlmemory' name='xmlRealloc'/>
+ <function line='856' file='tree' name='xmlSaveFileEnc'/>
+ <function line='313' file='xmlwriter' name='xmlTextWriterEndDocument'/>
+ <function line='193' file='xmlwriter' name='xmlTextWriterEndElement'/>
+ <typedef line='65' file='xmlwriter' name='xmlTextWriterPtr'/>
+ <function line='78' file='xmlwriter' name='xmlTextWriterStartDocument'/>
+ <function line='87' file='xmlwriter' name='xmlTextWriterStartElement'/>
+ <function line='117' file='xmlwriter' name='xmlTextWriterWriteAttribute'/>
+ <function line='100' file='xmlwriter' name='xmlTextWriterWriteComment'/>
+ <function line='174' file='xmlwriter' name='xmlTextWriterWriteElement'/>
+ <function line='136' file='xmlwriter' name='xmlTextWriterWriteFormatComment'/>
+ <function line='155' file='xmlwriter' name='xmlTextWriterWriteFormatElement'/>
</uses>
</example>
<example filename='tree1.c'>
@@ -328,7 +330,7 @@
<uses>
<enum line='222' file='tree' name='XML_ELEMENT_NODE'/>
<enum line='210' file='tree' name='XML_NAMESPACE_DECL'/>
- <variable line='166' file='globals' name='xmlFree'/>
+ <variable line='166' file='xmlmemory' name='xmlFree'/>
<function line='39' file='parser' name='xmlInitParser'/>
<typedef line='199' file='tree' name='xmlNodePtr'/>
<typedef line='211' file='tree' name='xmlNsPtr'/>
diff --git a/doc/examples/index.html b/doc/examples/index.html
index b4d29f31..14694030 100644
--- a/doc/examples/index.html
+++ b/doc/examples/index.html
@@ -80,13 +80,13 @@ install</i> step or when installing the libxml2 development package:</p>
</ul>
<p>Uses:</p>
<ul>
- <li> line 105: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li>
- <li> line 117: Macro <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li>
- <li> line 117: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a> from xmlIO.h</li>
- <li> line 124: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-parser.html#xmlReadMemory">xmlReadMemory</a> from parser.h</li>
- <li> line 134: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a> from xinclude.h</li>
- <li> line 143: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlDocDump">xmlDocDump</a> from tree.h</li>
- <li> line 149: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li>
+ <li> line 106: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li>
+ <li> line 118: Macro <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li>
+ <li> line 118: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a> from xmlIO.h</li>
+ <li> line 125: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-parser.html#xmlReadMemory">xmlReadMemory</a> from parser.h</li>
+ <li> line 135: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a> from xinclude.h</li>
+ <li> line 144: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlDocDump">xmlDocDump</a> from tree.h</li>
+ <li> line 150: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li>
</ul>
<p>Usage:</p>
<p>io1</p>
@@ -354,21 +354,24 @@ install</i> step or when installing the libxml2 development package:</p>
<li>
<a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html">&lt;libxml/xmlreader.h&gt;</a>
</li>
+ <li>
+ <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-parser.html">&lt;libxml/parser.h&gt;</a>
+ </li>
</ul>
<p>Uses:</p>
<ul>
- <li> line 30: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a> from xmlreader.h</li>
- <li> line 34: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a> from xmlreader.h</li>
- <li> line 37: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a> from xmlreader.h</li>
- <li> line 38: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a> from xmlreader.h</li>
- <li> line 40: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a> from xmlreader.h</li>
- <li> line 41: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a> from xmlreader.h</li>
- <li> line 45: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlstring.html#xmlStrlen">xmlStrlen</a> from xmlstring.h</li>
- <li> line 60: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> from xmlreader.h</li>
- <li> line 68: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a> from xmlreader.h</li>
- <li> line 73: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a> from xmlreader.h</li>
- <li> line 81: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a> from xmlreader.h</li>
- <li> line 84: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a> from xmlreader.h</li>
+ <li> line 31: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a> from xmlreader.h</li>
+ <li> line 35: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a> from xmlreader.h</li>
+ <li> line 38: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a> from xmlreader.h</li>
+ <li> line 39: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a> from xmlreader.h</li>
+ <li> line 41: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a> from xmlreader.h</li>
+ <li> line 42: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a> from xmlreader.h</li>
+ <li> line 46: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlstring.html#xmlStrlen">xmlStrlen</a> from xmlstring.h</li>
+ <li> line 61: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> from xmlreader.h</li>
+ <li> line 69: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a> from xmlreader.h</li>
+ <li> line 74: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a> from xmlreader.h</li>
+ <li> line 82: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a> from xmlreader.h</li>
+ <li> line 85: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a> from xmlreader.h</li>
</ul>
<p>Usage:</p>
<p>reader2 &lt;valid_xml_filename&gt;</p>
@@ -425,35 +428,38 @@ install</i> step or when installing the libxml2 development package:</p>
<li>
<a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html">&lt;libxml/xmlwriter.h&gt;</a>
</li>
+ <li>
+ <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-parser.html">&lt;libxml/parser.h&gt;</a>
+ </li>
</ul>
<p>Uses:</p>
<ul>
- <li> line 64: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> from xmlwriter.h</li>
- <li> line 68: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a> from xmlwriter.h</li>
- <li> line 77: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a> from xmlwriter.h</li>
- <li> line 86: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a> from xmlwriter.h</li>
- <li> line 99: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a> from xmlwriter.h</li>
- <li> line 116: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a> from xmlwriter.h</li>
- <li> line 135: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a> from xmlwriter.h</li>
- <li> line 154: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a> from xmlwriter.h</li>
- <li> line 173: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a> from xmlwriter.h</li>
- <li> line 192: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a> from xmlwriter.h</li>
- <li> line 312: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a> from xmlwriter.h</li>
- <li> line 319: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a> from xmlwriter.h</li>
- <li> line 333: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> from tree.h</li>
- <li> line 339: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlBufferCreate">xmlBufferCreate</a> from tree.h</li>
- <li> line 347: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a> from xmlwriter.h</li>
- <li> line 605: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlBufferFree">xmlBufferFree</a> from tree.h</li>
- <li> line 624: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a> from xmlwriter.h</li>
- <li> line 855: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlSaveFileEnc">xmlSaveFileEnc</a> from tree.h</li>
- <li> line 872: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> from tree.h</li>
- <li> line 877: Macro <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-parser.html#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a> from parser.h</li>
- <li> line 877: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlNewDoc">xmlNewDoc</a> from tree.h</li>
- <li> line 886: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlNewDocNode">xmlNewDocNode</a> from tree.h</li>
- <li> line 893: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a> from tree.h</li>
- <li> line 896: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a> from xmlwriter.h</li>
- <li> line 1143: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> from encoding.h</li>
- <li> line 1148: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a> from encoding.h</li>
+ <li> line 65: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> from xmlwriter.h</li>
+ <li> line 69: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a> from xmlwriter.h</li>
+ <li> line 78: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a> from xmlwriter.h</li>
+ <li> line 87: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a> from xmlwriter.h</li>
+ <li> line 100: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a> from xmlwriter.h</li>
+ <li> line 117: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a> from xmlwriter.h</li>
+ <li> line 136: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a> from xmlwriter.h</li>
+ <li> line 155: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a> from xmlwriter.h</li>
+ <li> line 174: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a> from xmlwriter.h</li>
+ <li> line 193: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a> from xmlwriter.h</li>
+ <li> line 313: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a> from xmlwriter.h</li>
+ <li> line 320: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a> from xmlwriter.h</li>
+ <li> line 334: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> from tree.h</li>
+ <li> line 340: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlBufferCreate">xmlBufferCreate</a> from tree.h</li>
+ <li> line 348: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a> from xmlwriter.h</li>
+ <li> line 606: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlBufferFree">xmlBufferFree</a> from tree.h</li>
+ <li> line 625: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a> from xmlwriter.h</li>
+ <li> line 856: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlSaveFileEnc">xmlSaveFileEnc</a> from tree.h</li>
+ <li> line 873: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> from tree.h</li>
+ <li> line 878: Macro <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-parser.html#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a> from parser.h</li>
+ <li> line 878: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlNewDoc">xmlNewDoc</a> from tree.h</li>
+ <li> line 887: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlNewDocNode">xmlNewDocNode</a> from tree.h</li>
+ <li> line 894: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a> from tree.h</li>
+ <li> line 897: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a> from xmlwriter.h</li>
+ <li> line 1144: Type <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> from encoding.h</li>
+ <li> line 1149: Function <a href="https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a> from encoding.h</li>
</ul>
<p>Usage:</p>
<p>testWriter</p>
diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml
index eabf4961..1dee142c 100644
--- a/doc/libxml2-api.xml
+++ b/doc/libxml2-api.xml
@@ -391,9 +391,17 @@
<exports symbol='XML_CHAR_ENCODING_UTF16BE' type='enum'/>
<exports symbol='XML_CHAR_ENCODING_UTF16LE' type='enum'/>
<exports symbol='XML_CHAR_ENCODING_UTF8' type='enum'/>
+ <exports symbol='XML_ENC_ERR_INPUT' type='enum'/>
+ <exports symbol='XML_ENC_ERR_INTERNAL' type='enum'/>
+ <exports symbol='XML_ENC_ERR_MEMORY' type='enum'/>
+ <exports symbol='XML_ENC_ERR_PARTIAL' type='enum'/>
+ <exports symbol='XML_ENC_ERR_SPACE' type='enum'/>
+ <exports symbol='XML_ENC_ERR_SUCCESS' type='enum'/>
+ <exports symbol='xmlCharEncError' type='typedef'/>
<exports symbol='xmlCharEncoding' type='typedef'/>
<exports symbol='xmlCharEncodingHandler' type='typedef'/>
<exports symbol='xmlCharEncodingHandlerPtr' type='typedef'/>
+ <exports symbol='_xmlBuffer' type='struct'/>
<exports symbol='_xmlCharEncodingHandler' type='struct'/>
<exports symbol='UTF8Toisolat1' type='function'/>
<exports symbol='isolat1ToUTF8' type='function'/>
@@ -442,6 +450,7 @@
<exports symbol='xmlEncodeEntitiesReentrant' type='function'/>
<exports symbol='xmlEncodeSpecialChars' type='function'/>
<exports symbol='xmlFreeEntitiesTable' type='function'/>
+ <exports symbol='xmlFreeEntity' type='function'/>
<exports symbol='xmlGetDocEntity' type='function'/>
<exports symbol='xmlGetDtdEntity' type='function'/>
<exports symbol='xmlGetParameterEntity' type='function'/>
@@ -451,73 +460,13 @@
</file>
<file name='globals'>
<summary>interface for all global variables of the library</summary>
- <description>all the global variables and thread handling for those variables is handled by this module. The bottom of this file is automatically generated by build_glob.py based on the description file global.data </description>
- <author>Gary Pennington &lt;Gary.Pennington@uk.sun.com&gt;, Daniel Veillard </author>
+ <description>Deprecated, don&apos;t use </description>
<exports symbol='xmlGlobalState' type='typedef'/>
<exports symbol='xmlGlobalStatePtr' type='typedef'/>
- <exports symbol='_xmlGlobalState' type='struct'/>
- <exports symbol='htmlDefaultSAXHandler' type='variable'/>
- <exports symbol='oldXMLWDcompatibility' type='variable'/>
- <exports symbol='xmlBufferAllocScheme' type='variable'/>
- <exports symbol='xmlDefaultBufferSize' type='variable'/>
- <exports symbol='xmlDefaultSAXHandler' type='variable'/>
- <exports symbol='xmlDefaultSAXLocator' type='variable'/>
- <exports symbol='xmlDeregisterNodeDefaultValue' type='variable'/>
- <exports symbol='xmlDoValidityCheckingDefaultValue' type='variable'/>
- <exports symbol='xmlFree' type='variable'/>
- <exports symbol='xmlGenericError' type='variable'/>
- <exports symbol='xmlGenericErrorContext' type='variable'/>
- <exports symbol='xmlGetWarningsDefaultValue' type='variable'/>
- <exports symbol='xmlIndentTreeOutput' type='variable'/>
- <exports symbol='xmlKeepBlanksDefaultValue' type='variable'/>
- <exports symbol='xmlLastError' type='variable'/>
- <exports symbol='xmlLineNumbersDefaultValue' type='variable'/>
- <exports symbol='xmlLoadExtDtdDefaultValue' type='variable'/>
- <exports symbol='xmlMalloc' type='variable'/>
- <exports symbol='xmlMallocAtomic' type='variable'/>
- <exports symbol='xmlMemStrdup' type='variable'/>
- <exports symbol='xmlOutputBufferCreateFilenameValue' type='variable'/>
- <exports symbol='xmlParserDebugEntities' type='variable'/>
- <exports symbol='xmlParserInputBufferCreateFilenameValue' type='variable'/>
- <exports symbol='xmlParserVersion' type='variable'/>
- <exports symbol='xmlPedanticParserDefaultValue' type='variable'/>
- <exports symbol='xmlRealloc' type='variable'/>
- <exports symbol='xmlRegisterNodeDefaultValue' type='variable'/>
- <exports symbol='xmlSaveNoEmptyTags' type='variable'/>
- <exports symbol='xmlStructuredError' type='variable'/>
- <exports symbol='xmlStructuredErrorContext' type='variable'/>
- <exports symbol='xmlSubstituteEntitiesDefaultValue' type='variable'/>
- <exports symbol='xmlTreeIndentString' type='variable'/>
<exports symbol='xmlCleanupGlobals' type='function'/>
- <exports symbol='xmlDeregisterNodeDefault' type='function'/>
- <exports symbol='xmlDeregisterNodeFunc' type='function'/>
+ <exports symbol='xmlGetGlobalState' type='function'/>
<exports symbol='xmlInitGlobals' type='function'/>
<exports symbol='xmlInitializeGlobalState' type='function'/>
- <exports symbol='xmlOutputBufferCreateFilenameDefault' type='function'/>
- <exports symbol='xmlOutputBufferCreateFilenameFunc' type='function'/>
- <exports symbol='xmlParserInputBufferCreateFilenameDefault' type='function'/>
- <exports symbol='xmlParserInputBufferCreateFilenameFunc' type='function'/>
- <exports symbol='xmlRegisterNodeDefault' type='function'/>
- <exports symbol='xmlRegisterNodeFunc' type='function'/>
- <exports symbol='xmlThrDefBufferAllocScheme' type='function'/>
- <exports symbol='xmlThrDefDefaultBufferSize' type='function'/>
- <exports symbol='xmlThrDefDeregisterNodeDefault' type='function'/>
- <exports symbol='xmlThrDefDoValidityCheckingDefaultValue' type='function'/>
- <exports symbol='xmlThrDefGetWarningsDefaultValue' type='function'/>
- <exports symbol='xmlThrDefIndentTreeOutput' type='function'/>
- <exports symbol='xmlThrDefKeepBlanksDefaultValue' type='function'/>
- <exports symbol='xmlThrDefLineNumbersDefaultValue' type='function'/>
- <exports symbol='xmlThrDefLoadExtDtdDefaultValue' type='function'/>
- <exports symbol='xmlThrDefOutputBufferCreateFilenameDefault' type='function'/>
- <exports symbol='xmlThrDefParserDebugEntities' type='function'/>
- <exports symbol='xmlThrDefParserInputBufferCreateFilenameDefault' type='function'/>
- <exports symbol='xmlThrDefPedanticParserDefaultValue' type='function'/>
- <exports symbol='xmlThrDefRegisterNodeDefault' type='function'/>
- <exports symbol='xmlThrDefSaveNoEmptyTags' type='function'/>
- <exports symbol='xmlThrDefSetGenericErrorFunc' type='function'/>
- <exports symbol='xmlThrDefSetStructuredErrorFunc' type='function'/>
- <exports symbol='xmlThrDefSubstituteEntitiesDefaultValue' type='function'/>
- <exports symbol='xmlThrDefTreeIndentString' type='function'/>
</file>
<file name='hash'>
<summary>Chained hash tables</summary>
@@ -675,6 +624,7 @@
<exports symbol='XML_PARSER_START' type='enum'/>
<exports symbol='XML_PARSER_START_TAG' type='enum'/>
<exports symbol='XML_PARSER_SYSTEM_LITERAL' type='enum'/>
+ <exports symbol='XML_PARSER_XML_DECL' type='enum'/>
<exports symbol='XML_PARSE_BIG_LINES' type='enum'/>
<exports symbol='XML_PARSE_COMPACT' type='enum'/>
<exports symbol='XML_PARSE_DOM' type='enum'/>
@@ -738,6 +688,7 @@
<exports symbol='XML_WITH_XPATH' type='enum'/>
<exports symbol='XML_WITH_XPTR' type='enum'/>
<exports symbol='XML_WITH_ZLIB' type='enum'/>
+ <exports symbol='xmlAttrHashBucket' type='typedef'/>
<exports symbol='xmlFeature' type='typedef'/>
<exports symbol='xmlParserInputState' type='typedef'/>
<exports symbol='xmlParserMode' type='typedef'/>
@@ -745,6 +696,7 @@
<exports symbol='xmlParserNodeInfoPtr' type='typedef'/>
<exports symbol='xmlParserNodeInfoSeq' type='typedef'/>
<exports symbol='xmlParserNodeInfoSeqPtr' type='typedef'/>
+ <exports symbol='xmlParserNsData' type='typedef'/>
<exports symbol='xmlParserOption' type='typedef'/>
<exports symbol='xmlSAXHandlerV1' type='typedef'/>
<exports symbol='xmlSAXHandlerV1Ptr' type='typedef'/>
@@ -756,6 +708,7 @@
<exports symbol='_xmlSAXHandler' type='struct'/>
<exports symbol='_xmlSAXHandlerV1' type='struct'/>
<exports symbol='_xmlSAXLocator' type='struct'/>
+ <exports symbol='xmlParserVersion' type='variable'/>
<exports symbol='attributeDeclSAXFunc' type='function'/>
<exports symbol='attributeSAXFunc' type='function'/>
<exports symbol='cdataBlockSAXFunc' type='function'/>
@@ -800,6 +753,7 @@
<exports symbol='xmlCtxtReadMemory' type='function'/>
<exports symbol='xmlCtxtReset' type='function'/>
<exports symbol='xmlCtxtResetPush' type='function'/>
+ <exports symbol='xmlCtxtSetMaxAmplification' type='function'/>
<exports symbol='xmlCtxtUseOptions' type='function'/>
<exports symbol='xmlExternalEntityLoader' type='function'/>
<exports symbol='xmlFreeParserCtxt' type='function'/>
@@ -859,6 +813,14 @@
<exports symbol='xmlSetupParserForBuffer' type='function'/>
<exports symbol='xmlStopParser' type='function'/>
<exports symbol='xmlSubstituteEntitiesDefault' type='function'/>
+ <exports symbol='xmlThrDefDoValidityCheckingDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefGetWarningsDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefKeepBlanksDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefLineNumbersDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefLoadExtDtdDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefParserDebugEntities' type='function'/>
+ <exports symbol='xmlThrDefPedanticParserDefaultValue' type='function'/>
+ <exports symbol='xmlThrDefSubstituteEntitiesDefaultValue' type='function'/>
</file>
<file name='parserInternals'>
<summary>internals routines and limits exported by the parser.</summary>
@@ -1363,10 +1325,10 @@
<exports symbol='xmlMutexPtr' type='typedef'/>
<exports symbol='xmlRMutex' type='typedef'/>
<exports symbol='xmlRMutexPtr' type='typedef'/>
+ <exports symbol='xmlCheckThreadLocalStorage' type='function'/>
<exports symbol='xmlCleanupThreads' type='function'/>
<exports symbol='xmlFreeMutex' type='function'/>
<exports symbol='xmlFreeRMutex' type='function'/>
- <exports symbol='xmlGetGlobalState' type='function'/>
<exports symbol='xmlGetThreadId' type='function'/>
<exports symbol='xmlInitThreads' type='function'/>
<exports symbol='xmlIsMainThread' type='function'/>
@@ -1570,6 +1532,8 @@
<exports symbol='xmlDOMWrapNewCtxt' type='function'/>
<exports symbol='xmlDOMWrapReconcileNamespaces' type='function'/>
<exports symbol='xmlDOMWrapRemoveNode' type='function'/>
+ <exports symbol='xmlDeregisterNodeDefault' type='function'/>
+ <exports symbol='xmlDeregisterNodeFunc' type='function'/>
<exports symbol='xmlDocCopyNode' type='function'/>
<exports symbol='xmlDocCopyNodeList' type='function'/>
<exports symbol='xmlDocDump' type='function'/>
@@ -1654,6 +1618,8 @@
<exports symbol='xmlNodeSetSpacePreserve' type='function'/>
<exports symbol='xmlPreviousElementSibling' type='function'/>
<exports symbol='xmlReconciliateNs' type='function'/>
+ <exports symbol='xmlRegisterNodeDefault' type='function'/>
+ <exports symbol='xmlRegisterNodeFunc' type='function'/>
<exports symbol='xmlRemoveProp' type='function'/>
<exports symbol='xmlReplaceNode' type='function'/>
<exports symbol='xmlSaveFile' type='function'/>
@@ -1678,6 +1644,10 @@
<exports symbol='xmlStringLenGetNodeList' type='function'/>
<exports symbol='xmlTextConcat' type='function'/>
<exports symbol='xmlTextMerge' type='function'/>
+ <exports symbol='xmlThrDefBufferAllocScheme' type='function'/>
+ <exports symbol='xmlThrDefDefaultBufferSize' type='function'/>
+ <exports symbol='xmlThrDefDeregisterNodeDefault' type='function'/>
+ <exports symbol='xmlThrDefRegisterNodeDefault' type='function'/>
<exports symbol='xmlUnlinkNode' type='function'/>
<exports symbol='xmlUnsetNsProp' type='function'/>
<exports symbol='xmlUnsetProp' type='function'/>
@@ -1899,6 +1869,8 @@
<exports symbol='xmlOutputBufferCreateFd' type='function'/>
<exports symbol='xmlOutputBufferCreateFile' type='function'/>
<exports symbol='xmlOutputBufferCreateFilename' type='function'/>
+ <exports symbol='xmlOutputBufferCreateFilenameDefault' type='function'/>
+ <exports symbol='xmlOutputBufferCreateFilenameFunc' type='function'/>
<exports symbol='xmlOutputBufferCreateIO' type='function'/>
<exports symbol='xmlOutputBufferFlush' type='function'/>
<exports symbol='xmlOutputBufferGetContent' type='function'/>
@@ -1914,6 +1886,8 @@
<exports symbol='xmlParserInputBufferCreateFd' type='function'/>
<exports symbol='xmlParserInputBufferCreateFile' type='function'/>
<exports symbol='xmlParserInputBufferCreateFilename' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateFilenameDefault' type='function'/>
+ <exports symbol='xmlParserInputBufferCreateFilenameFunc' type='function'/>
<exports symbol='xmlParserInputBufferCreateIO' type='function'/>
<exports symbol='xmlParserInputBufferCreateMem' type='function'/>
<exports symbol='xmlParserInputBufferCreateStatic' type='function'/>
@@ -1927,6 +1901,8 @@
<exports symbol='xmlRegisterHTTPPostCallbacks' type='function'/>
<exports symbol='xmlRegisterInputCallbacks' type='function'/>
<exports symbol='xmlRegisterOutputCallbacks' type='function'/>
+ <exports symbol='xmlThrDefOutputBufferCreateFilenameDefault' type='function'/>
+ <exports symbol='xmlThrDefParserInputBufferCreateFilenameDefault' type='function'/>
</file>
<file name='xmlautomata'>
<summary>API to build regexp automata</summary>
@@ -2678,6 +2654,7 @@
<exports symbol='XML_TREE_NOT_UTF8' type='enum'/>
<exports symbol='XML_TREE_UNTERMINATED_ENTITY' type='enum'/>
<exports symbol='XML_WAR_CATALOG_PI' type='enum'/>
+ <exports symbol='XML_WAR_ENCODING_MISMATCH' type='enum'/>
<exports symbol='XML_WAR_ENTITY_REDEFINED' type='enum'/>
<exports symbol='XML_WAR_LANG_VALUE' type='enum'/>
<exports symbol='XML_WAR_NS_COLUMN' type='enum'/>
@@ -2737,6 +2714,7 @@
<exports symbol='xmlErrorPtr' type='typedef'/>
<exports symbol='xmlParserErrors' type='typedef'/>
<exports symbol='_xmlError' type='struct'/>
+ <exports symbol='_xmlParserInput' type='struct'/>
<exports symbol='initGenericErrorDefaultFunc' type='function'/>
<exports symbol='xmlCopyError' type='function'/>
<exports symbol='xmlCtxtGetLastError' type='function'/>
@@ -2754,6 +2732,8 @@
<exports symbol='xmlSetGenericErrorFunc' type='function'/>
<exports symbol='xmlSetStructuredErrorFunc' type='function'/>
<exports symbol='xmlStructuredErrorFunc' type='function'/>
+ <exports symbol='xmlThrDefSetGenericErrorFunc' type='function'/>
+ <exports symbol='xmlThrDefSetStructuredErrorFunc' type='function'/>
</file>
<file name='xmlexports'>
<summary>macros for marking symbols as exportable/importable.</summary>
@@ -2765,11 +2745,11 @@
<summary>interface for the memory allocator</summary>
<description>provides interfaces for the memory allocator, including debugging capabilities. </description>
<author>Daniel Veillard </author>
- <exports symbol='DEBUG_MEMORY' type='macro'/>
- <exports symbol='xmlMalloc' type='macro'/>
- <exports symbol='xmlMallocAtomic' type='macro'/>
- <exports symbol='xmlMemStrdup' type='macro'/>
- <exports symbol='xmlRealloc' type='macro'/>
+ <exports symbol='xmlFree' type='variable'/>
+ <exports symbol='xmlMalloc' type='variable'/>
+ <exports symbol='xmlMallocAtomic' type='variable'/>
+ <exports symbol='xmlMemStrdup' type='variable'/>
+ <exports symbol='xmlRealloc' type='variable'/>
<exports symbol='xmlCleanupMemory' type='function'/>
<exports symbol='xmlFreeFunc' type='function'/>
<exports symbol='xmlGcMemGet' type='function'/>
@@ -2933,6 +2913,7 @@
<exports symbol='xmlTextReaderSchemaValidate' type='function'/>
<exports symbol='xmlTextReaderSchemaValidateCtxt' type='function'/>
<exports symbol='xmlTextReaderSetErrorHandler' type='function'/>
+ <exports symbol='xmlTextReaderSetMaxAmplification' type='function'/>
<exports symbol='xmlTextReaderSetParserProp' type='function'/>
<exports symbol='xmlTextReaderSetSchema' type='function'/>
<exports symbol='xmlTextReaderSetStructuredErrorHandler' type='function'/>
@@ -3019,6 +3000,9 @@
<exports symbol='xmlSaveToFilename' type='function'/>
<exports symbol='xmlSaveToIO' type='function'/>
<exports symbol='xmlSaveTree' type='function'/>
+ <exports symbol='xmlThrDefIndentTreeOutput' type='function'/>
+ <exports symbol='xmlThrDefSaveNoEmptyTags' type='function'/>
+ <exports symbol='xmlThrDefTreeIndentString' type='function'/>
</file>
<file name='xmlschemas'>
<summary>incomplete XML Schemas structure implementation</summary>
@@ -3348,10 +3332,7 @@
<summary>compile-time version information</summary>
<description>compile-time version information for the XML library </description>
<author>Daniel Veillard </author>
- <exports symbol='ATTRIBUTE_UNUSED' type='macro'/>
<exports symbol='DEBUG_MEMORY_LOCATION' type='macro'/>
- <exports symbol='LIBXML_ATTR_ALLOC_SIZE' type='macro'/>
- <exports symbol='LIBXML_ATTR_FORMAT' type='macro'/>
<exports symbol='LIBXML_AUTOMATA_ENABLED' type='macro'/>
<exports symbol='LIBXML_C14N_ENABLED' type='macro'/>
<exports symbol='LIBXML_CATALOG_ENABLED' type='macro'/>
@@ -3791,9 +3772,6 @@
</file>
</files>
<symbols>
- <macro name='ATTRIBUTE_UNUSED' file='xmlversion'>
- <info>Macro used to signal to GCC unused function parameters</info>
- </macro>
<macro name='BAD_CAST' file='xmlstring'>
<info>Macro to cast a string to an xmlChar * when one know its safe.</info>
</macro>
@@ -3827,9 +3805,6 @@
<info>Macro to check that the value on top of the XPath stack is of a given type. Return(0) in case of failure</info>
<arg name='typeval' info='the XPath type'/>
</macro>
- <macro name='DEBUG_MEMORY' file='xmlmemory'>
- <info>DEBUG_MEMORY replaces the allocator with a collect and debug shell to the libc allocator. DEBUG_MEMORY should only be activated when debugging libxml i.e. if libxml has been configured with --with-debug-mem too. #define DEBUG_MEMORY_FREED #define DEBUG_MEMORY_LOCATION</info>
- </macro>
<macro name='DEBUG_MEMORY_LOCATION' file='xmlversion'>
<info>Whether the memory debugging is configured in</info>
</macro>
@@ -3933,12 +3908,6 @@
<macro name='LIBXML2_NEW_BUFFER' file='tree'>
<info>Macro used to express that the API use the new buffers for xmlParserInputBuffer and xmlOutputBuffer. The change was introduced in 2.9.0.</info>
</macro>
- <macro name='LIBXML_ATTR_ALLOC_SIZE' file='xmlversion'>
- <info>Macro used to indicate to GCC this is an allocator function</info>
- </macro>
- <macro name='LIBXML_ATTR_FORMAT' file='xmlversion'>
- <info>Macro used to indicate to GCC the parameter are printf like</info>
- </macro>
<macro name='LIBXML_AUTOMATA_ENABLED' file='xmlversion'>
<info>Whether the automata interfaces are compiled in</info>
</macro>
@@ -4814,6 +4783,12 @@ and not by parsing an instance'/>
<enum name='XML_ELEMENT_TYPE_EMPTY' file='tree' value='1' type='xmlElementTypeVal'/>
<enum name='XML_ELEMENT_TYPE_MIXED' file='tree' value='3' type='xmlElementTypeVal'/>
<enum name='XML_ELEMENT_TYPE_UNDEFINED' file='tree' value='0' type='xmlElementTypeVal'/>
+ <enum name='XML_ENC_ERR_INPUT' file='encoding' value='-2' type='xmlCharEncError'/>
+ <enum name='XML_ENC_ERR_INTERNAL' file='encoding' value='-4' type='xmlCharEncError'/>
+ <enum name='XML_ENC_ERR_MEMORY' file='encoding' value='-5' type='xmlCharEncError'/>
+ <enum name='XML_ENC_ERR_PARTIAL' file='encoding' value='-3' type='xmlCharEncError'/>
+ <enum name='XML_ENC_ERR_SPACE' file='encoding' value='-1' type='xmlCharEncError'/>
+ <enum name='XML_ENC_ERR_SUCCESS' file='encoding' value='0' type='xmlCharEncError'/>
<enum name='XML_ENTITY_DECL' file='tree' value='17' type='xmlElementType'/>
<enum name='XML_ENTITY_NODE' file='tree' value='6' type='xmlElementType'/>
<enum name='XML_ENTITY_REF_NODE' file='tree' value='5' type='xmlElementType'/>
@@ -5069,7 +5044,7 @@ and not by parsing an instance'/>
<enum name='XML_PARSER_MISC' file='parser' value='1' type='xmlParserInputState' info='Misc* before int subset'/>
<enum name='XML_PARSER_PI' file='parser' value='2' type='xmlParserInputState' info='Within a processing instruction'/>
<enum name='XML_PARSER_PROLOG' file='parser' value='4' type='xmlParserInputState' info='Misc* after internal subset'/>
- <enum name='XML_PARSER_PUBLIC_LITERAL' file='parser' value='16' type='xmlParserInputState' info=' within a PUBLIC value'/>
+ <enum name='XML_PARSER_PUBLIC_LITERAL' file='parser' value='16' type='xmlParserInputState' info='within a PUBLIC value'/>
<enum name='XML_PARSER_SEVERITY_ERROR' file='xmlreader' value='4' type='xmlParserSeverities'/>
<enum name='XML_PARSER_SEVERITY_VALIDITY_ERROR' file='xmlreader' value='2' type='xmlParserSeverities'/>
<enum name='XML_PARSER_SEVERITY_VALIDITY_WARNING' file='xmlreader' value='1' type='xmlParserSeverities'/>
@@ -5079,6 +5054,7 @@ and not by parsing an instance'/>
<enum name='XML_PARSER_SUBST_ENTITIES' file='xmlreader' value='4' type='xmlParserProperties'/>
<enum name='XML_PARSER_SYSTEM_LITERAL' file='parser' value='13' type='xmlParserInputState' info='within a SYSTEM value'/>
<enum name='XML_PARSER_VALIDATE' file='xmlreader' value='3' type='xmlParserProperties'/>
+ <enum name='XML_PARSER_XML_DECL' file='parser' value='17' type='xmlParserInputState' info=' before XML decl (but after BOM)'/>
<enum name='XML_PARSE_BIG_LINES' file='parser' value='4194304' type='xmlParserOption' info=' Store big lines numbers in text PSVI field'/>
<enum name='XML_PARSE_COMPACT' file='parser' value='65536' type='xmlParserOption' info='compact small text nodes; no modification of
the tree allowed afterwards (will possibly
@@ -5733,6 +5709,7 @@ crash if you try to modify the tree)'/>
<enum name='XML_TREE_NOT_UTF8' file='xmlerror' value='1303' type='xmlParserErrors' info='1303'/>
<enum name='XML_TREE_UNTERMINATED_ENTITY' file='xmlerror' value='1302' type='xmlParserErrors' info='1302'/>
<enum name='XML_WAR_CATALOG_PI' file='xmlerror' value='93' type='xmlParserErrors' info='93'/>
+ <enum name='XML_WAR_ENCODING_MISMATCH' file='xmlerror' value='113' type='xmlParserErrors' info='113'/>
<enum name='XML_WAR_ENTITY_REDEFINED' file='xmlerror' value='107' type='xmlParserErrors' info='107'/>
<enum name='XML_WAR_LANG_VALUE' file='xmlerror' value='98' type='xmlParserErrors' info='98'/>
<enum name='XML_WAR_NS_COLUMN' file='xmlerror' value='106' type='xmlParserErrors' info='106'/>
@@ -5929,6 +5906,7 @@ if necessary or NULL'/>
<field name='atype' type='xmlAttributeType' info=' the attribute type if validating'/>
<field name='psvi' type='void *' info=' for type/PSVI information'/>
</struct>
+ <struct name='xmlAttrHashBucket' file='parser' type='struct _xmlAttrHashBucket'/>
<typedef name='xmlAttrPtr' file='tree' type='xmlAttr *'/>
<struct name='xmlAttribute' file='tree' type='struct _xmlAttribute'>
<field name='_private' type='void *' info=' application data'/>
@@ -5999,6 +5977,7 @@ if necessary or NULL'/>
<typedef name='xmlChar' file='xmlstring' type='unsigned char'>
<info>This is a basic byte in an UTF-8 encoded string. It&apos;s unsigned allowing to pinpoint case where char * are assigned to xmlChar * (possibly making serialization back impossible).</info>
</typedef>
+ <typedef name='xmlCharEncError' file='encoding' type='enum'/>
<typedef name='xmlCharEncoding' file='encoding' type='enum'/>
<struct name='xmlCharEncodingHandler' file='encoding' type='struct _xmlCharEncodingHandler'>
<field name='name' type='char *' info=''/>
@@ -6045,12 +6024,11 @@ standalone attribute was specified'/>
<field name='extSubset' type='struct _xmlDtd *' info=' the document external subset'/>
<field name='oldNs' type='struct _xmlNs *' info=' Global namespace, the old way'/>
<field name='version' type='const xmlChar *' info=' the XML version string'/>
- <field name='encoding' type='const xmlChar *' info=' external initial encoding, if any'/>
+ <field name='encoding' type='const xmlChar *' info=' actual encoding, if any'/>
<field name='ids' type='void *' info=' Hash table for ID attributes if any'/>
<field name='refs' type='void *' info=' Hash table for IDREFs attributes if any'/>
<field name='URL' type='const xmlChar *' info=' The URI for that document'/>
- <field name='charset' type='int' info=' Internal flag for charset handling,
-actually an xmlCharEncoding'/>
+ <field name='charset' type='int' info=' unused'/>
<field name='dict' type='struct _xmlDict *' info=' dict used to allocate names or NULL'/>
<field name='psvi' type='void *' info=' for type/PSVI information'/>
<field name='parseFlags' type='int' info=' set of xmlParserOption used to parse the
@@ -6168,41 +6146,7 @@ set at the end of parsing'/>
<typedef name='xmlExpNodePtr' file='xmlregexp' type='xmlExpNode *'/>
<typedef name='xmlExpNodeType' file='xmlregexp' type='enum'/>
<typedef name='xmlFeature' file='parser' type='enum'/>
- <struct name='xmlGlobalState' file='globals' type='struct _xmlGlobalState'>
- <field name='xmlParserVersion' type='const char *' info=''/>
- <field name='xmlDefaultSAXLocator' type='xmlSAXLocator' info=''/>
- <field name='xmlDefaultSAXHandler' type='xmlSAXHandlerV1' info=''/>
- <field name='docbDefaultSAXHandler' type='xmlSAXHandlerV1' info=' unused'/>
- <field name='htmlDefaultSAXHandler' type='xmlSAXHandlerV1' info=''/>
- <field name='xmlFree' type='xmlFreeFunc' info=''/>
- <field name='xmlMalloc' type='xmlMallocFunc' info=''/>
- <field name='xmlMemStrdup' type='xmlStrdupFunc' info=''/>
- <field name='xmlRealloc' type='xmlReallocFunc' info=''/>
- <field name='xmlGenericError' type='xmlGenericErrorFunc' info=''/>
- <field name='xmlStructuredError' type='xmlStructuredErrorFunc' info=''/>
- <field name='xmlGenericErrorContext' type='void *' info=''/>
- <field name='oldXMLWDcompatibility' type='int' info=''/>
- <field name='xmlBufferAllocScheme' type='xmlBufferAllocationScheme' info=''/>
- <field name='xmlDefaultBufferSize' type='int' info=''/>
- <field name='xmlSubstituteEntitiesDefaultValue' type='int' info=''/>
- <field name='xmlDoValidityCheckingDefaultValue' type='int' info=''/>
- <field name='xmlGetWarningsDefaultValue' type='int' info=''/>
- <field name='xmlKeepBlanksDefaultValue' type='int' info=''/>
- <field name='xmlLineNumbersDefaultValue' type='int' info=''/>
- <field name='xmlLoadExtDtdDefaultValue' type='int' info=''/>
- <field name='xmlParserDebugEntities' type='int' info=''/>
- <field name='xmlPedanticParserDefaultValue' type='int' info=''/>
- <field name='xmlSaveNoEmptyTags' type='int' info=''/>
- <field name='xmlIndentTreeOutput' type='int' info=''/>
- <field name='xmlTreeIndentString' type='const char *' info=''/>
- <field name='xmlRegisterNodeDefaultValue' type='xmlRegisterNodeFunc' info=''/>
- <field name='xmlDeregisterNodeDefaultValue' type='xmlDeregisterNodeFunc' info=''/>
- <field name='xmlMallocAtomic' type='xmlMallocFunc' info=''/>
- <field name='xmlLastError' type='xmlError' info=''/>
- <field name='xmlParserInputBufferCreateFilenameValue' type='xmlParserInputBufferCreateFilenameFunc' info=''/>
- <field name='xmlOutputBufferCreateFilenameValue' type='xmlOutputBufferCreateFilenameFunc' info=''/>
- <field name='xmlStructuredErrorContext' type='void *' info=''/>
- </struct>
+ <struct name='xmlGlobalState' file='globals' type='struct _xmlGlobalState'/>
<typedef name='xmlGlobalStatePtr' file='globals' type='xmlGlobalState *'/>
<struct name='xmlHashTable' file='hash' type='struct _xmlHashTable'/>
<typedef name='xmlHashTablePtr' file='hash' type='xmlHashTable *'/>
@@ -6339,8 +6283,7 @@ set at the end of parsing'/>
<field name='spaceTab' type='int *' info=' array of space infos'/>
<field name='depth' type='int' info=' to prevent entity substitution loops'/>
<field name='entity' type='xmlParserInputPtr' info=' used to check entities boundaries'/>
- <field name='charset' type='int' info=' encoding of the in-memory content
-actually an xmlCharEncoding'/>
+ <field name='charset' type='int' info=' unused'/>
<field name='nodelen' type='int' info=' Those two fields are there to'/>
<field name='nodemem' type='int' info=' Speed up large node parsing'/>
<field name='pedantic' type='int' info=' signal pedantic warnings'/>
@@ -6363,7 +6306,7 @@ actually an xmlCharEncoding'/>
<field name='nsNr' type='int' info=' the number of inherited namespaces'/>
<field name='nsMax' type='int' info=' the size of the arrays'/>
<field name='nsTab' type='const xmlChar * *' info=' the array of prefix/namespace name'/>
- <field name='attallocs' type='int *' info=' which attribute were allocated'/>
+ <field name='attallocs' type='unsigned *' info=' which attribute were allocated'/>
<field name='pushTab' type='xmlStartTag *' info=' array of data for push'/>
<field name='attsDefault' type='xmlHashTablePtr' info=' defaulted attributes if any'/>
<field name='attsSpecial' type='xmlHashTablePtr' info=' non-CDATA attributes if any'/>
@@ -6389,6 +6332,10 @@ actually an xmlCharEncoding'/>
<field name='endCheckState' type='int' info=' quote state for push parser'/>
<field name='nbErrors' type='unsigned short' info=' number of errors'/>
<field name='nbWarnings' type='unsigned short' info=' number of warnings'/>
+ <field name='maxAmpl' type='unsigned' info=' maximum amplification factor'/>
+ <field name='nsdb' type='xmlParserNsData *' info=' namespace database'/>
+ <field name='attrHashMax' type='unsigned' info=' allocated size'/>
+ <field name='attrHash' type='xmlAttrHashBucket *' info=' atttribute hash table'/>
</struct>
<typedef name='xmlParserCtxtPtr' file='tree' type='xmlParserCtxt *'/>
<typedef name='xmlParserErrors' file='xmlerror' type='enum'/>
@@ -6404,9 +6351,9 @@ actually an xmlCharEncoding'/>
<field name='col' type='int' info=' Current column'/>
<field name='consumed' type='unsigned long' info=' How many xmlChars already consumed'/>
<field name='free' type='xmlParserInputDeallocate' info=' function to deallocate the base'/>
- <field name='encoding' type='const xmlChar *' info=' the encoding string for entity'/>
+ <field name='encoding' type='const xmlChar *' info=' unused'/>
<field name='version' type='const xmlChar *' info=' the version string for entity'/>
- <field name='standalone' type='int' info=' Was that entity marked standalone'/>
+ <field name='flags' type='int' info=' Flags'/>
<field name='id' type='int' info=' an unique identifier for the entity'/>
<field name='parentConsumed' type='unsigned long' info=' consumed bytes from parents'/>
<field name='entity' type='xmlEntityPtr' info=' entity, if any'/>
@@ -6440,6 +6387,7 @@ actually an xmlCharEncoding'/>
<field name='buffer' type='xmlParserNodeInfo *' info=''/>
</struct>
<typedef name='xmlParserNodeInfoSeqPtr' file='parser' type='xmlParserNodeInfoSeq *'/>
+ <struct name='xmlParserNsData' file='parser' type='struct _xmlParserNsData'/>
<typedef name='xmlParserOption' file='parser' type='enum'/>
<typedef name='xmlParserProperties' file='xmlreader' type='enum'/>
<typedef name='xmlParserSeverities' file='xmlreader' type='enum'/>
@@ -6903,7 +6851,7 @@ Could we use @subtypes for this?'/>
<field name='comp' type='xmlXPathCompExprPtr' info=' the precompiled expression'/>
<field name='xptr' type='int' info=' it this an XPointer expression'/>
<field name='ancestor' type='xmlNodePtr' info=' used for walking preceding axis'/>
- <field name='valueFrame' type='int' info=' unused'/>
+ <field name='valueFrame' type='int' info=' always zero for compatibility'/>
</struct>
<typedef name='xmlXPathParserContextPtr' file='xpath' type='xmlXPathParserContext *'/>
<struct name='xmlXPathType' file='xpath' type='struct _xmlXPathType'>
@@ -6918,45 +6866,9 @@ Could we use @subtypes for this?'/>
<typedef name='xmlXPathVariablePtr' file='xpath' type='xmlXPathVariable *'/>
<variable name='emptyExp' file='xmlregexp' type='xmlExpNodePtr'/>
<variable name='forbiddenExp' file='xmlregexp' type='xmlExpNodePtr'/>
- <variable name='htmlDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'>
- <info>DEPRECATED: This handler is unused and will be removed from future versions. Default old SAX v1 handler for HTML, builds the DOM tree</info>
- </variable>
- <variable name='oldXMLWDcompatibility' file='globals' type='int'>
- <info>Global setting, DEPRECATED.</info>
- </variable>
- <variable name='xmlBufferAllocScheme' file='globals' type='xmlBufferAllocationScheme'>
- <info>DEPRECATED: Don&apos;t use. Global setting, default allocation policy for buffers, default is XML_BUFFER_ALLOC_EXACT</info>
- </variable>
- <variable name='xmlDefaultBufferSize' file='globals' type='int'>
- <info>DEPRECATED: Don&apos;t use. Global setting, default buffer size. Default value is BASE_BUFFER_SIZE</info>
- </variable>
- <variable name='xmlDefaultSAXHandler' file='globals' type='xmlSAXHandlerV1'>
- <info>DEPRECATED: This handler is unused and will be removed from future versions. Default SAX version1 handler for XML, builds the DOM tree</info>
- </variable>
- <variable name='xmlDefaultSAXLocator' file='globals' type='xmlSAXLocator'>
- <info>DEPRECATED: Don&apos;t use The default SAX Locator { getPublicId, getSystemId, getLineNumber, getColumnNumber}</info>
- </variable>
- <variable name='xmlDeregisterNodeDefaultValue' file='globals' type='xmlDeregisterNodeFunc'>
- <info>DEPRECATED: Don&apos;t use</info>
- </variable>
- <variable name='xmlDoValidityCheckingDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: Use the modern options API with XML_PARSE_DTDVALID. Global setting, indicate that the parser should work in validating mode. Disabled by default.</info>
- </variable>
- <variable name='xmlFree' file='globals' type='xmlFreeFunc'>
+ <variable name='xmlFree' file='xmlmemory' type='xmlFreeFunc'>
<info>@mem: an already allocated block of memory The variable holding the libxml free() implementation</info>
</variable>
- <variable name='xmlGenericError' file='globals' type='xmlGenericErrorFunc'>
- <info>Global setting: function used for generic error callbacks</info>
- </variable>
- <variable name='xmlGenericErrorContext' file='globals' type='void *'>
- <info>Global setting passed to generic error callbacks</info>
- </variable>
- <variable name='xmlGetWarningsDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: Don&apos;t use Global setting, indicate that the DTD validation should provide warnings. Activated by default.</info>
- </variable>
- <variable name='xmlIndentTreeOutput' file='globals' type='int'>
- <info>Global setting, asking the serializer to indent the output tree by default Enabled by default</info>
- </variable>
<variable name='xmlIsBaseCharGroup' file='chvalid' type='const xmlChRangeGroup'/>
<variable name='xmlIsCharGroup' file='chvalid' type='const xmlChRangeGroup'/>
<variable name='xmlIsCombiningGroup' file='chvalid' type='const xmlChRangeGroup'/>
@@ -6964,67 +6876,27 @@ Could we use @subtypes for this?'/>
<variable name='xmlIsExtenderGroup' file='chvalid' type='const xmlChRangeGroup'/>
<variable name='xmlIsIdeographicGroup' file='chvalid' type='const xmlChRangeGroup'/>
<variable name='xmlIsPubidChar_tab' file='chvalid' type='const unsigned charxmlIsPubidChar_tab[256]'/>
- <variable name='xmlKeepBlanksDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: Use the modern options API with XML_PARSE_NOBLANKS. Global setting, indicate that the parser should keep all blanks nodes found in the content Activated by default, this is actually needed to have the parser conformant to the XML Recommendation, however the option is kept for some applications since this was libxml1 default behaviour.</info>
- </variable>
- <variable name='xmlLastError' file='globals' type='xmlError'/>
- <variable name='xmlLineNumbersDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: The modern options API always enables line numbers. Global setting, indicate that the parser should store the line number in the content field of elements in the DOM tree. Disabled by default since this may not be safe for old classes of application.</info>
- </variable>
- <variable name='xmlLoadExtDtdDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: Use the modern options API with XML_PARSE_DTDLOAD. Global setting, indicate that the parser should load DTD while not validating. Disabled by default.</info>
- </variable>
- <variable name='xmlMalloc' file='globals' type='xmlMallocFunc'>
+ <variable name='xmlMalloc' file='xmlmemory' type='xmlMallocFunc'>
<info>@size: the size requested in bytes The variable holding the libxml malloc() implementation Returns a pointer to the newly allocated block or NULL in case of error</info>
</variable>
- <variable name='xmlMallocAtomic' file='globals' type='xmlMallocFunc'>
+ <variable name='xmlMallocAtomic' file='xmlmemory' type='xmlMallocFunc'>
<info>@size: the size requested in bytes The variable holding the libxml malloc() implementation for atomic data (i.e. blocks not containing pointers), useful when using a garbage collecting allocator. Returns a pointer to the newly allocated block or NULL in case of error</info>
</variable>
- <variable name='xmlMemStrdup' file='globals' type='xmlStrdupFunc'>
+ <variable name='xmlMemStrdup' file='xmlmemory' type='xmlStrdupFunc'>
<info>@str: a zero terminated string The variable holding the libxml strdup() implementation Returns the copy of the string or NULL in case of error</info>
</variable>
- <variable name='xmlOutputBufferCreateFilenameValue' file='globals' type='xmlOutputBufferCreateFilenameFunc'>
- <info>DEPRECATED: Don&apos;t use</info>
- </variable>
- <variable name='xmlParserDebugEntities' file='globals' type='int'>
- <info>DEPRECATED: Don&apos;t use Global setting, asking the parser to print out debugging information. while handling entities. Disabled by default</info>
- </variable>
- <variable name='xmlParserInputBufferCreateFilenameValue' file='globals' type='xmlParserInputBufferCreateFilenameFunc'>
- <info>DEPRECATED: Don&apos;t use</info>
- </variable>
<variable name='xmlParserMaxDepth' file='parserInternals' type='unsigned int'>
<info>arbitrary depth limit for the XML documents that we allow to process. This is not a limitation of the parser but a safety boundary feature. It can be disabled with the XML_PARSE_HUGE parser option.</info>
</variable>
- <variable name='xmlParserVersion' file='globals' type='const char *'>
+ <variable name='xmlParserVersion' file='parser' type='const char * const'>
<info>Constant string describing the internal version of the library</info>
</variable>
- <variable name='xmlPedanticParserDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: Use the modern options API with XML_PARSE_PEDANTIC. Global setting, indicate that the parser be pedantic Disabled by default.</info>
- </variable>
- <variable name='xmlRealloc' file='globals' type='xmlReallocFunc'>
+ <variable name='xmlRealloc' file='xmlmemory' type='xmlReallocFunc'>
<info>@mem: an already allocated block of memory @size: the new size requested in bytes The variable holding the libxml realloc() implementation Returns a pointer to the newly reallocated block or NULL in case of error</info>
</variable>
- <variable name='xmlRegisterNodeDefaultValue' file='globals' type='xmlRegisterNodeFunc'>
- <info>DEPRECATED: Don&apos;t use</info>
- </variable>
- <variable name='xmlSaveNoEmptyTags' file='globals' type='int'>
- <info>Global setting, asking the serializer to not output empty tags as &lt;empty/&gt; but &lt;empty&gt;&lt;/empty&gt;. those two forms are indistinguishable once parsed. Disabled by default</info>
- </variable>
<variable name='xmlStringComment' file='parserInternals' type='const xmlCharxmlStringComment[]'/>
<variable name='xmlStringText' file='parserInternals' type='const xmlCharxmlStringText[]'/>
<variable name='xmlStringTextNoenc' file='parserInternals' type='const xmlCharxmlStringTextNoenc[]'/>
- <variable name='xmlStructuredError' file='globals' type='xmlStructuredErrorFunc'>
- <info>Global setting: function used for structured error callbacks</info>
- </variable>
- <variable name='xmlStructuredErrorContext' file='globals' type='void *'>
- <info>Global setting passed to structured error callbacks</info>
- </variable>
- <variable name='xmlSubstituteEntitiesDefaultValue' file='globals' type='int'>
- <info>DEPRECATED: Use the modern options API with XML_PARSE_NOENT. Global setting, indicate that the parser should not generate entity references but replace them with the actual content of the entity Disabled by default, this should be activated when using XPath since the XPath data model requires entities replacement and the XPath engine does not handle entities references transparently.</info>
- </variable>
- <variable name='xmlTreeIndentString' file='globals' type='const char *'>
- <info>The string used to do one-level indent. By default is equal to &quot; &quot; (two spaces)</info>
- </variable>
<variable name='xmlXPathNAN' file='xpath' type='double'/>
<variable name='xmlXPathNINF' file='xpath' type='double'/>
<variable name='xmlXPathPINF' file='xpath' type='double'/>
@@ -7040,7 +6912,7 @@ Could we use @subtypes for this?'/>
<function name='UTF8Toisolat1' file='encoding' module='encoding'>
<cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
<info>Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1 block of chars out.</info>
- <return type='int' info='the number of bytes written if success, -2 if the transcoding fails, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.'/>
+ <return type='int' info='the number of bytes written or an XML_ENC_ERR code. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.'/>
<arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
<arg name='outlen' type='int *' info='the length of @out'/>
<arg name='in' type='const unsigned char *' info='a pointer to an array of UTF-8 chars'/>
@@ -7392,7 +7264,7 @@ Could we use @subtypes for this?'/>
<info>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</info>
<return type='htmlDocPtr' info='the resulting document tree'/>
<arg name='ctxt' type='htmlParserCtxtPtr' info='an HTML parser context'/>
- <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='str' type='const xmlChar *' info='a pointer to a zero terminated string'/>
<arg name='URL' type='const char *' info='the base URL to use for the document'/>
<arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
<arg name='options' type='int' info='a combination of htmlParserOption(s)'/>
@@ -7878,7 +7750,7 @@ Could we use @subtypes for this?'/>
</functype>
<function name='isolat1ToUTF8' file='encoding' module='encoding'>
<info>Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8 block of chars out.</info>
- <return type='int' info='the number of bytes written if success, or -1 otherwise The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.'/>
+ <return type='int' info='the number of bytes written or an XML_ENC_ERR code. The value of @inlen after return is the number of octets consumed if the return value is positive, else unpredictable. The value of @outlen after return is the number of octets produced.'/>
<arg name='out' type='unsigned char *' info='a pointer to an array of bytes to store the result'/>
<arg name='outlen' type='int *' info='the length of @out'/>
<arg name='in' type='const unsigned char *' info='a pointer to an array of ISO Latin 1 chars'/>
@@ -8565,8 +8437,8 @@ Could we use @subtypes for this?'/>
<arg name='size' type='size_t' info='initial size of buffer'/>
</function>
<function name='xmlBufferCreateStatic' file='tree' module='tree'>
- <info>Create an XML buffer initialized with bytes.</info>
- <return type='xmlBufferPtr' info=''/>
+ <info></info>
+ <return type='xmlBufferPtr' info='an XML buffer initialized with bytes.'/>
<arg name='mem' type='void *' info='the memory area'/>
<arg name='size' type='size_t' info='the size in byte'/>
</function>
@@ -8664,7 +8536,7 @@ Could we use @subtypes for this?'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
</function>
<function name='xmlC14NDocDumpMemory' file='c14n' module='c14n'>
- <cond>defined(LIBXML_C14N_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
+ <cond>defined(LIBXML_C14N_ENABLED)</cond>
<info>Dumps the canonized image of given XML document into memory. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
<return type='int' info='the number of bytes written on success or a negative value on fail'/>
<arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
@@ -8675,7 +8547,7 @@ Could we use @subtypes for this?'/>
<arg name='doc_txt_ptr' type='xmlChar **' info='the memory pointer for allocated canonical XML text; the caller of this functions is responsible for calling xmlFree() to free allocated memory'/>
</function>
<function name='xmlC14NDocSave' file='c14n' module='c14n'>
- <cond>defined(LIBXML_C14N_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
+ <cond>defined(LIBXML_C14N_ENABLED)</cond>
<info>Dumps the canonized image of given XML document into the file. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
<return type='int' info='the number of bytes written success or a negative value on fail'/>
<arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
@@ -8687,7 +8559,7 @@ Could we use @subtypes for this?'/>
<arg name='compression' type='int' info='the compression level (zlib required): -1 - libxml default, 0 - uncompressed, &gt;0 - compression level'/>
</function>
<function name='xmlC14NDocSaveTo' file='c14n' module='c14n'>
- <cond>defined(LIBXML_C14N_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
+ <cond>defined(LIBXML_C14N_ENABLED)</cond>
<info>Dumps the canonized image of given XML document into the provided buffer. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
<return type='int' info='non-negative value on success or a negative value on fail'/>
<arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
@@ -8698,7 +8570,7 @@ Could we use @subtypes for this?'/>
<arg name='buf' type='xmlOutputBufferPtr' info='the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output'/>
</function>
<function name='xmlC14NExecute' file='c14n' module='c14n'>
- <cond>defined(LIBXML_C14N_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
+ <cond>defined(LIBXML_C14N_ENABLED)</cond>
<info>Dumps the canonized image of given XML document into the provided buffer. For details see &quot;Canonical XML&quot; (http://www.w3.org/TR/xml-c14n) or &quot;Exclusive XML Canonicalization&quot; (http://www.w3.org/TR/xml-exc-c14n)</info>
<return type='int' info='non-negative value on success or a negative value on fail'/>
<arg name='doc' type='xmlDocPtr' info='the XML document for canonization'/>
@@ -8710,7 +8582,7 @@ Could we use @subtypes for this?'/>
<arg name='buf' type='xmlOutputBufferPtr' info='the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output'/>
</function>
<functype name='xmlC14NIsVisibleCallback' file='c14n' module='c14n'>
- <cond>defined(LIBXML_C14N_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
+ <cond>defined(LIBXML_C14N_ENABLED)</cond>
<info>Signature for a C14N callback on visible nodes</info>
<return type='int' info='1 if the node should be included'/>
<arg name='user_data' type='void *' info='user data'/>
@@ -8853,21 +8725,21 @@ Could we use @subtypes for this?'/>
</function>
<function name='xmlCharEncFirstLine' file='encoding' module='encoding'>
<info>DEPERECATED: Don&apos;t use.</info>
- <return type='int' info=''/>
+ <return type='int' info='the number of bytes written or an XML_ENC_ERR code.'/>
<arg name='handler' type='xmlCharEncodingHandler *' info='char encoding transformation data structure'/>
<arg name='out' type='xmlBufferPtr' info='an xmlBuffer for the output.'/>
<arg name='in' type='xmlBufferPtr' info='an xmlBuffer for the input'/>
</function>
<function name='xmlCharEncInFunc' file='encoding' module='encoding'>
<info>Generic front-end for the encoding handler input function</info>
- <return type='int' info='the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can&apos;t fit into the encoding we want), or'/>
+ <return type='int' info='the number of bytes written or an XML_ENC_ERR code.'/>
<arg name='handler' type='xmlCharEncodingHandler *' info='char encoding transformation data structure'/>
<arg name='out' type='xmlBufferPtr' info='an xmlBuffer for the output.'/>
<arg name='in' type='xmlBufferPtr' info='an xmlBuffer for the input'/>
</function>
<function name='xmlCharEncOutFunc' file='encoding' module='encoding'>
<info>Generic front-end for the encoding handler output function a first call with @in == NULL has to be made firs to initiate the output in case of non-stateless encoding needing to initiate their state or the output (like the BOM in UTF16). In case of UTF8 sequence conversion errors for the given encoder, the content will be automatically remapped to a CharRef sequence.</info>
- <return type='int' info='the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can&apos;t fit into the encoding we want), or'/>
+ <return type='int' info='the number of bytes written or an XML_ENC_ERR code.'/>
<arg name='handler' type='xmlCharEncodingHandler *' info='char encoding transformation data structure'/>
<arg name='out' type='xmlBufferPtr' info='an xmlBuffer for the output.'/>
<arg name='in' type='xmlBufferPtr' info='an xmlBuffer for the input'/>
@@ -8921,6 +8793,10 @@ Could we use @subtypes for this?'/>
<return type='int' info='1 if correct 0 otherwise'/>
<arg name='lang' type='const xmlChar *' info='pointer to the string value'/>
</function>
+ <function name='xmlCheckThreadLocalStorage' file='threads' module='globals'>
+ <info>Check whether thread-local storage could be allocated. In cross-platform code running in multithreaded environments, this function should be called once in each thread before calling other library functions to make sure that thread-local storage was allocated properly.</info>
+ <return type='int' info='0 on success or -1 if a memory allocation failed. A failed allocation signals a typically fatal and irrecoverable out-of-memory situation. Don&apos;t call any library functions in this case. This function never fails if the library is compiled with support for thread-local storage. This function never fails for the &quot;main&quot; thread which is the first thread calling xmlInitParser. Available since v2.12.0.'/>
+ </function>
<function name='xmlCheckUTF8' file='xmlstring' module='xmlstring'>
<info>Checks @utf for being valid UTF-8. @utf is assumed to be null-terminated. This function is not super-strict, as it will allow longer UTF-8 sequences than necessary. Note that Java is capable of producing these sequences if provoked. Also note, this routine checks for the 4-byte maximum size, but does not check for 0x10ffff maximum value.</info>
<return type='int' info='value: true if @utf is valid.'/>
@@ -8962,7 +8838,7 @@ Could we use @subtypes for this?'/>
<info>clears the entire output callback table. this includes the compiled-in I/O callbacks.</info>
<return type='void'/>
</function>
- <function name='xmlCleanupParser' file='parser' module='parser'>
+ <function name='xmlCleanupParser' file='parser' module='threads'>
<info>This function name is somewhat misleading. It does not clean up parser state, it cleans up memory allocated by the library itself. It is a cleanup function for the XML library. It tries to reclaim all related global memory allocated for the library processing. It doesn&apos;t deallocate any document related memory. One should call xmlCleanupParser() only when the process has finished using the library and all XML/HTML documents built with it. See also xmlInitParser() which has the opposite function of preparing the library for operations. WARNING: if your application is multithreaded or has plugin support calling this may crash the application if another thread or a plugin is still using libxml2. It&apos;s sometimes very hard to guess if libxml2 is in use in the application, some libraries or plugins may use it without notice. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind !</info>
<return type='void'/>
</function>
@@ -9055,7 +8931,7 @@ Could we use @subtypes for this?'/>
<function name='xmlCopyError' file='xmlerror' module='error'>
<info>Save the original error to the new place.</info>
<return type='int' info='0 in case of success and -1 in case of error.'/>
- <arg name='from' type='xmlErrorPtr' info='a source error'/>
+ <arg name='from' type='const xmlError *' info='a source error'/>
<arg name='to' type='xmlErrorPtr' info='a target error'/>
</function>
<function name='xmlCopyNamespace' file='tree' module='tree'>
@@ -9100,7 +8976,7 @@ Could we use @subtypes for this?'/>
<function name='xmlCreateDocParserCtxt' file='parser' module='parser'>
<info>Creates a parser context for an XML in-memory document.</info>
<return type='xmlParserCtxtPtr' info='the new parser context or NULL'/>
- <arg name='cur' type='const xmlChar *' info='a pointer to an array of xmlChar'/>
+ <arg name='str' type='const xmlChar *' info='a pointer to an array of xmlChar'/>
</function>
<function name='xmlCreateEntitiesTable' file='entities' module='entities'>
<info>create and initialize an empty entities hash table. This really doesn&apos;t make sense and should be deprecated</info>
@@ -9169,14 +9045,14 @@ Could we use @subtypes for this?'/>
</function>
<function name='xmlCtxtGetLastError' file='xmlerror' module='error'>
<info>Get the last parsing error registered.</info>
- <return type='xmlErrorPtr' info='NULL if no error occurred or a pointer to the error'/>
+ <return type='const xmlError *' info='NULL if no error occurred or a pointer to the error'/>
<arg name='ctx' type='void *' info='an XML parser context'/>
</function>
<function name='xmlCtxtReadDoc' file='parser' module='parser'>
<info>parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context</info>
<return type='xmlDocPtr' info='the resulting document tree'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
- <arg name='cur' type='const xmlChar *' info='a pointer to a zero terminated string'/>
+ <arg name='str' type='const xmlChar *' info='a pointer to a zero terminated string'/>
<arg name='URL' type='const char *' info='the base URL to use for the document'/>
<arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
<arg name='options' type='int' info='a combination of xmlParserOption'/>
@@ -9238,6 +9114,12 @@ Could we use @subtypes for this?'/>
<arg name='filename' type='const char *' info='an optional file name or URI'/>
<arg name='encoding' type='const char *' info='the document encoding, or NULL'/>
</function>
+ <function name='xmlCtxtSetMaxAmplification' file='parser' module='parser'>
+ <info>To protect against exponential entity expansion (&quot;billion laughs&quot;), the size of serialized output is (roughly) limited to the input size multiplied by this factor. The default value is 5. When working with documents making heavy use of entity expansion, it can be necessary to increase the value. For security reasons, this should only be considered when processing trusted input.</info>
+ <return type='void'/>
+ <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
+ <arg name='maxAmpl' type='unsigned' info='maximum amplification factor'/>
+ </function>
<function name='xmlCtxtUseOptions' file='parser' module='parser'>
<info>Applies the options to the parser context</info>
<return type='int' info='0 in case of success, the set of unknown or unimplemented options in case of error.'/>
@@ -9406,12 +9288,12 @@ Could we use @subtypes for this?'/>
<return type='int' info='0 in case of success, -1 in case of error'/>
<arg name='alias' type='const char *' info='the alias name as parsed, in UTF-8 format (ASCII actually)'/>
</function>
- <function name='xmlDeregisterNodeDefault' file='globals' module='globals'>
+ <function name='xmlDeregisterNodeDefault' file='tree' module='tree'>
<info>Registers a callback for node destruction</info>
<return type='xmlDeregisterNodeFunc' info='the previous value of the deregistration function'/>
<arg name='func' type='xmlDeregisterNodeFunc' info='function pointer to the new DeregisterNodeFunc'/>
</function>
- <functype name='xmlDeregisterNodeFunc' file='globals' module='globals'>
+ <functype name='xmlDeregisterNodeFunc' file='tree' module='tree'>
<info>Signature for the deregistration callback of a discarded node</info>
<return type='void'/>
<arg name='node' type='xmlNodePtr' info='the current node'/>
@@ -9436,7 +9318,7 @@ Could we use @subtypes for this?'/>
<arg name='sub' type='xmlDictPtr' info='an existing dictionary'/>
</function>
<function name='xmlDictExists' file='dict' module='dict'>
- <info>Check if the @name exists in the dictionary @dict.</info>
+ <info>Check if a string exists in the dictionary.</info>
<return type='const xmlChar *' info='the internal copy of the name or NULL if not found.'/>
<arg name='dict' type='xmlDictPtr' info='the dictionary'/>
<arg name='name' type='const xmlChar *' info='the name of the userdata'/>
@@ -9453,11 +9335,11 @@ Could we use @subtypes for this?'/>
<arg name='dict' type='xmlDictPtr' info='the dictionary'/>
</function>
<function name='xmlDictLookup' file='dict' module='dict'>
- <info>Add the @name to the dictionary @dict if not present.</info>
- <return type='const xmlChar *' info='the internal copy of the name or NULL in case of internal error'/>
- <arg name='dict' type='xmlDictPtr' info='the dictionary'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='len' type='int' info='the length of the name, if -1 it is recomputed'/>
+ <info>Lookup a string and add it to the dictionary if it wasn&apos;t found.</info>
+ <return type='const xmlChar *' info='the interned copy of the string or NULL if a memory allocation failed.'/>
+ <arg name='dict' type='xmlDictPtr' info='dictionary'/>
+ <arg name='name' type='const xmlChar *' info='string key'/>
+ <arg name='len' type='int' info='length of the key, if -1 it is recomputed'/>
</function>
<function name='xmlDictOwns' file='dict' module='dict'>
<info>check if a string is owned by the dictionary</info>
@@ -9466,8 +9348,8 @@ Could we use @subtypes for this?'/>
<arg name='str' type='const xmlChar *' info='the string'/>
</function>
<function name='xmlDictQLookup' file='dict' module='dict'>
- <info>Add the QName @prefix:@name to the hash @dict if not present.</info>
- <return type='const xmlChar *' info='the internal copy of the QName or NULL in case of internal error'/>
+ <info>Lookup the QName @prefix:@name and add it to the dictionary if it wasn&apos;t found.</info>
+ <return type='const xmlChar *' info='the interned copy of the string or NULL if a memory allocation failed.'/>
<arg name='dict' type='xmlDictPtr' info='the dictionary'/>
<arg name='prefix' type='const xmlChar *' info='the prefix'/>
<arg name='name' type='const xmlChar *' info='the name'/>
@@ -9883,6 +9765,11 @@ Could we use @subtypes for this?'/>
<return type='void'/>
<arg name='table' type='xmlEntitiesTablePtr' info='An entity table'/>
</function>
+ <function name='xmlFreeEntity' file='entities' module='entities'>
+ <info></info>
+ <return type='void'/>
+ <arg name='entity' type='xmlEntityPtr' info=''/>
+ </function>
<function name='xmlFreeEnumeration' file='valid' module='valid'>
<info>free an enumeration attribute node (recursive).</info>
<return type='void'/>
@@ -10122,9 +10009,9 @@ Could we use @subtypes for this?'/>
<arg name='len' type='int *' info='the length of the features name array (input/output)'/>
<arg name='result' type='const char **' info='an array of string to be filled with the features name.'/>
</function>
- <function name='xmlGetGlobalState' file='threads' module='threads'>
- <info>DEPRECATED: Internal function, do not use. xmlGetGlobalState() is called to retrieve the global state for a thread.</info>
- <return type='xmlGlobalStatePtr' info='the thread global state or NULL in case of error'/>
+ <function name='xmlGetGlobalState' file='globals' module='globals'>
+ <info>DEPRECATED</info>
+ <return type='xmlGlobalStatePtr' info='NULL.'/>
</function>
<function name='xmlGetID' file='valid' module='valid'>
<info>Search the attribute declaring the given ID</info>
@@ -10144,7 +10031,7 @@ Could we use @subtypes for this?'/>
</function>
<function name='xmlGetLastError' file='xmlerror' module='error'>
<info>Get the last global error registered. This is per thread if compiled with thread support.</info>
- <return type='const xmlError *' info='NULL if no error occurred or a pointer to the error'/>
+ <return type='const xmlError *' info='a pointer to the error'/>
</function>
<function name='xmlGetLineNo' file='tree' module='tree'>
<info>Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if XML_PARSE_BIG_LINES parser option was used</info>
@@ -10236,28 +10123,28 @@ Could we use @subtypes for this?'/>
<arg name='name' type='const xmlChar *' info='the attribute name'/>
</function>
<function name='xmlHashAddEntry' file='hash' module='hash'>
- <info>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.</info>
- <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ <info>Add a hash table entry. If an entry with this key already exists, payload will not be updated and -1 is returned. This return value can&apos;t be distinguished from out-of-memory errors, so this function should be used with care.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='string key'/>
+ <arg name='payload' type='void *' info='pointer to the payload'/>
</function>
<function name='xmlHashAddEntry2' file='hash' module='hash'>
- <info>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.</info>
- <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ <info>Add a hash table entry with two strings as key. See xmlHashAddEntry.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='payload' type='void *' info='pointer to the payload'/>
</function>
<function name='xmlHashAddEntry3' file='hash' module='hash'>
- <info>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.</info>
- <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
- <arg name='userdata' type='void *' info='a pointer to the userdata'/>
+ <info>Add a hash table entry with three strings as key. See xmlHashAddEntry.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='key3' type='const xmlChar *' info='third string key'/>
+ <arg name='payload' type='void *' info='pointer to the payload'/>
</function>
<functype name='xmlHashCopier' file='hash' module='hash'>
<info>Callback to copy data from a hash.</info>
@@ -10266,19 +10153,19 @@ Could we use @subtypes for this?'/>
<arg name='name' type='const xmlChar *' info='the name associated'/>
</functype>
<function name='xmlHashCopy' file='hash' module='hash'>
- <info>Scan the hash @table and applied @f to each value.</info>
- <return type='xmlHashTablePtr' info='the new table or NULL in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='f' type='xmlHashCopier' info='the copier function for items in the hash'/>
+ <info>Copy the hash @table using @copy to copy payloads.</info>
+ <return type='xmlHashTablePtr' info='the new table or NULL if a memory allocation failed.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='copy' type='xmlHashCopier' info='copier function for items in the hash'/>
</function>
<function name='xmlHashCreate' file='hash' module='hash'>
- <info>Create a new xmlHashTablePtr.</info>
- <return type='xmlHashTablePtr' info='the newly created object, or NULL if an error occurred.'/>
- <arg name='size' type='int' info='the size of the hash table'/>
+ <info>Create a new hash table. Set size to zero if the number of entries can&apos;t be estimated.</info>
+ <return type='xmlHashTablePtr' info='the newly created object, or NULL if a memory allocation failed.'/>
+ <arg name='size' type='int' info='initial size of the hash table'/>
</function>
<function name='xmlHashCreateDict' file='hash' module='hash'>
- <info>Create a new xmlHashTablePtr which will use @dict as the internal dictionary</info>
- <return type='xmlHashTablePtr' info='the newly created object, or NULL if an error occurred.'/>
+ <info>Create a new hash table backed by a dictionary. This can reduce resource usage considerably if most keys passed to API functions originate from this dictionary.</info>
+ <return type='xmlHashTablePtr' info='the newly created object, or NULL if a memory allocation failed.'/>
<arg name='size' type='int' info='the size of the hash table'/>
<arg name='dict' type='xmlDictPtr' info='a dictionary to use for the hash'/>
</function>
@@ -10291,120 +10178,120 @@ Could we use @subtypes for this?'/>
<function name='xmlHashDefaultDeallocator' file='hash' module='hash'>
<info>Free a hash table entry with xmlFree.</info>
<return type='void'/>
- <arg name='entry' type='void *' info='the hash table entry'/>
- <arg name='name' type='const xmlChar *' info='the entry&apos;s name'/>
+ <arg name='entry' type='void *' info='hash table entry'/>
+ <arg name='key' type='const xmlChar *' info='the entry&apos;s string key'/>
</function>
<function name='xmlHashFree' file='hash' module='hash'>
- <info>Free the hash @table and its contents. The userdata is deallocated with @f if provided.</info>
+ <info>Free the hash and its contents. The payload is deallocated with @dealloc if provided.</info>
<return type='void'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for items in the hash'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function or NULL'/>
</function>
<function name='xmlHashLookup' file='hash' module='hash'>
- <info>Find the userdata specified by the @name.</info>
- <return type='void *' info='the pointer to the userdata'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <info>Find the entry specified by @key.</info>
+ <return type='void *' info='a pointer to the payload or NULL if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='string key'/>
</function>
<function name='xmlHashLookup2' file='hash' module='hash'>
- <info>Find the userdata specified by the (@name, @name2) tuple.</info>
- <return type='void *' info='the pointer to the userdata'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <info>Find the payload specified by the (@key, @key2) tuple.</info>
+ <return type='void *' info='a pointer to the payload or NULL if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
</function>
<function name='xmlHashLookup3' file='hash' module='hash'>
- <info>Find the userdata specified by the (@name, @name2, @name3) tuple.</info>
- <return type='void *' info='the a pointer to the userdata'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ <info>Find the payload specified by the (@key, @key2, @key3) tuple.</info>
+ <return type='void *' info='a pointer to the payload or NULL if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='key3' type='const xmlChar *' info='third string key'/>
</function>
<function name='xmlHashQLookup' file='hash' module='hash'>
- <info>Find the userdata specified by the QName @prefix:@name/@name.</info>
- <return type='void *' info='the pointer to the userdata'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='prefix' type='const xmlChar *' info='the prefix of the userdata'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
+ <info>Find the payload specified by the QName @prefix:@name or @name.</info>
+ <return type='void *' info='a pointer to the payload or NULL if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='prefix' type='const xmlChar *' info='prefix of the string key'/>
+ <arg name='name' type='const xmlChar *' info='local name of the string key'/>
</function>
<function name='xmlHashQLookup2' file='hash' module='hash'>
- <info>Find the userdata specified by the QNames tuple</info>
- <return type='void *' info='the pointer to the userdata'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='prefix' type='const xmlChar *' info='the prefix of the userdata'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='prefix2' type='const xmlChar *' info='the second prefix of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
+ <info>Find the payload specified by the QNames tuple.</info>
+ <return type='void *' info='a pointer to the payload or NULL if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='prefix' type='const xmlChar *' info='first prefix'/>
+ <arg name='name' type='const xmlChar *' info='first local name'/>
+ <arg name='prefix2' type='const xmlChar *' info='second prefix'/>
+ <arg name='name2' type='const xmlChar *' info='second local name'/>
</function>
<function name='xmlHashQLookup3' file='hash' module='hash'>
- <info>Find the userdata specified by the (@name, @name2, @name3) tuple.</info>
- <return type='void *' info='the a pointer to the userdata'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='prefix' type='const xmlChar *' info='the prefix of the userdata'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='prefix2' type='const xmlChar *' info='the second prefix of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='prefix3' type='const xmlChar *' info='the third prefix of the userdata'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
+ <info>Find the payload specified by the QNames tuple.</info>
+ <return type='void *' info='a pointer to the payload or NULL if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='prefix' type='const xmlChar *' info='first prefix'/>
+ <arg name='name' type='const xmlChar *' info='first local name'/>
+ <arg name='prefix2' type='const xmlChar *' info='second prefix'/>
+ <arg name='name2' type='const xmlChar *' info='second local name'/>
+ <arg name='prefix3' type='const xmlChar *' info='third prefix'/>
+ <arg name='name3' type='const xmlChar *' info='third local name'/>
</function>
<function name='xmlHashRemoveEntry' file='hash' module='hash'>
- <info>Find the userdata specified by the @name and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</info>
- <return type='int' info='0 if the removal succeeded and -1 in case of error or not found.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for removed item (if any)'/>
+ <info>Find the entry specified by the @key and remove it from the hash table. Payload will be freed with @dealloc.</info>
+ <return type='int' info='0 on success and -1 if no entry was found.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='string key'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function for removed item or NULL'/>
</function>
<function name='xmlHashRemoveEntry2' file='hash' module='hash'>
- <info>Find the userdata specified by the (@name, @name2) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</info>
- <return type='int' info='0 if the removal succeeded and -1 in case of error or not found.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for removed item (if any)'/>
+ <info>Remove an entry with two strings as key. See xmlHashRemoveEntry.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function for removed item or NULL'/>
</function>
<function name='xmlHashRemoveEntry3' file='hash' module='hash'>
- <info>Find the userdata specified by the (@name, @name2, @name3) tuple and remove it from the hash @table. Existing userdata for this tuple will be removed and freed with @f.</info>
- <return type='int' info='0 if the removal succeeded and -1 in case of error or not found.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for removed item (if any)'/>
+ <info>Remove an entry with three strings as key. See xmlHashRemoveEntry.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='key3' type='const xmlChar *' info='third string key'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function for removed item or NULL'/>
</function>
<function name='xmlHashScan' file='hash' module='hash'>
- <info>Scan the hash @table and applied @f to each value.</info>
+ <info>Scan the hash @table and apply @scan to each value.</info>
<return type='void'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='f' type='xmlHashScanner' info='the scanner function for items in the hash'/>
- <arg name='data' type='void *' info='extra data passed to f'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='scan' type='xmlHashScanner' info='scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to @scan'/>
</function>
<function name='xmlHashScan3' file='hash' module='hash'>
- <info>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</info>
+ <info>Scan the hash @table and apply @scan to each value matching (@key, @key2, @key3) tuple. If one of the keys is null, the comparison is considered to match.</info>
<return type='void'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata or NULL'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata or NULL'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata or NULL'/>
- <arg name='f' type='xmlHashScanner' info='the scanner function for items in the hash'/>
- <arg name='data' type='void *' info='extra data passed to f'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key or NULL'/>
+ <arg name='key2' type='const xmlChar *' info='second string key or NULL'/>
+ <arg name='key3' type='const xmlChar *' info='third string key or NULL'/>
+ <arg name='scan' type='xmlHashScanner' info='scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to @scan'/>
</function>
<function name='xmlHashScanFull' file='hash' module='hash'>
- <info>Scan the hash @table and applied @f to each value.</info>
+ <info>Scan the hash @table and apply @scan to each value.</info>
<return type='void'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='f' type='xmlHashScannerFull' info='the scanner function for items in the hash'/>
- <arg name='data' type='void *' info='extra data passed to f'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='scan' type='xmlHashScannerFull' info='scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to @scan'/>
</function>
<function name='xmlHashScanFull3' file='hash' module='hash'>
- <info>Scan the hash @table and applied @f to each value matching (@name, @name2, @name3) tuple. If one of the names is null, the comparison is considered to match.</info>
+ <info>Scan the hash @table and apply @scan to each value matching (@key, @key2, @key3) tuple. If one of the keys is null, the comparison is considered to match.</info>
<return type='void'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata or NULL'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata or NULL'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata or NULL'/>
- <arg name='f' type='xmlHashScannerFull' info='the scanner function for items in the hash'/>
- <arg name='data' type='void *' info='extra data passed to f'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key or NULL'/>
+ <arg name='key2' type='const xmlChar *' info='second string key or NULL'/>
+ <arg name='key3' type='const xmlChar *' info='third string key or NULL'/>
+ <arg name='scan' type='xmlHashScannerFull' info='scanner function for items in the hash'/>
+ <arg name='data' type='void *' info='extra data passed to @scan'/>
</function>
<functype name='xmlHashScanner' file='hash' module='hash'>
<info>Callback when scanning data in a hash with the simple scanner.</info>
@@ -10423,36 +10310,36 @@ Could we use @subtypes for this?'/>
<arg name='name3' type='const xmlChar *' info='the third name associated'/>
</functype>
<function name='xmlHashSize' file='hash' module='hash'>
- <info>Query the number of elements installed in the hash @table.</info>
- <return type='int' info='the number of elements in the hash table or -1 in case of error'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
+ <info>Query the number of elements in the hash table.</info>
+ <return type='int' info='the number of elements in the hash table or -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
</function>
<function name='xmlHashUpdateEntry' file='hash' module='hash'>
- <info>Add the @userdata to the hash @table. This can later be retrieved by using the @name. Existing entry for this @name will be removed and freed with @f if found.</info>
- <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='userdata' type='void *' info='a pointer to the userdata'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for replaced item (if any)'/>
+ <info>Add a hash table entry. If an entry with this key already exists, the old payload will be freed and updated with the new value.</info>
+ <return type='int' info='0 in case of success, -1 if a memory allocation failed.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='string key'/>
+ <arg name='payload' type='void *' info='pointer to the payload'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function for replaced item or NULL'/>
</function>
<function name='xmlHashUpdateEntry2' file='hash' module='hash'>
- <info>Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Existing entry for this tuple will be removed and freed with @f if found.</info>
- <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='userdata' type='void *' info='a pointer to the userdata'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for replaced item (if any)'/>
+ <info>Add a hash table entry with two strings as key. See xmlHashUpdateEntry.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='payload' type='void *' info='pointer to the payload'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function for replaced item or NULL'/>
</function>
<function name='xmlHashUpdateEntry3' file='hash' module='hash'>
- <info>Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Existing entry for this tuple will be removed and freed with @f if found.</info>
- <return type='int' info='0 the addition succeeded and -1 in case of error.'/>
- <arg name='table' type='xmlHashTablePtr' info='the hash table'/>
- <arg name='name' type='const xmlChar *' info='the name of the userdata'/>
- <arg name='name2' type='const xmlChar *' info='a second name of the userdata'/>
- <arg name='name3' type='const xmlChar *' info='a third name of the userdata'/>
- <arg name='userdata' type='void *' info='a pointer to the userdata'/>
- <arg name='f' type='xmlHashDeallocator' info='the deallocator function for replaced item (if any)'/>
+ <info>Add a hash table entry with three strings as key. See xmlHashUpdateEntry.</info>
+ <return type='int' info='0 on success and -1 in case of error.'/>
+ <arg name='hash' type='xmlHashTablePtr' info='hash table'/>
+ <arg name='key' type='const xmlChar *' info='first string key'/>
+ <arg name='key2' type='const xmlChar *' info='second string key'/>
+ <arg name='key3' type='const xmlChar *' info='third string key'/>
+ <arg name='payload' type='void *' info='pointer to the payload'/>
+ <arg name='dealloc' type='xmlHashDeallocator' info='deallocator function for replaced item or NULL'/>
</function>
<function name='xmlIOFTPClose' file='xmlIO' module='xmlIO'>
<cond>defined(LIBXML_FTP_ENABLED)</cond>
@@ -10538,8 +10425,8 @@ Could we use @subtypes for this?'/>
<return type='void'/>
<arg name='seq' type='xmlParserNodeInfoSeqPtr' info='a node info sequence pointer'/>
</function>
- <function name='xmlInitParser' file='parser' module='parser'>
- <info>Initialization function for the XML parser. This is not reentrant. Call once before processing in case of use in multithreaded programs.</info>
+ <function name='xmlInitParser' file='parser' module='threads'>
+ <info>Initialization function for the XML parser. Call once from the main thread before using the library in multithreaded programs.</info>
<return type='void'/>
</function>
<function name='xmlInitParserCtxt' file='parser' module='parserInternals'>
@@ -10558,10 +10445,10 @@ Could we use @subtypes for this?'/>
</function>
<function name='xmlInitializeDict' file='dict' module='dict'>
<info>DEPRECATED: Alias for xmlInitParser.</info>
- <return type='int' info=''/>
+ <return type='int' info='0.'/>
</function>
<function name='xmlInitializeGlobalState' file='globals' module='globals'>
- <info>xmlInitializeGlobalState() initialize a global state with all the default values of the library.</info>
+ <info>DEPRECATED: No-op.</info>
<return type='void'/>
<arg name='gs' type='xmlGlobalStatePtr' info='a pointer to a newly allocated global state'/>
</function>
@@ -10644,8 +10531,8 @@ Could we use @subtypes for this?'/>
<return type='int' info='0 if not, non-zero otherwise'/>
<arg name='c' type='int' info='an unicode character (int)'/>
</function>
- <function name='xmlIsMainThread' file='threads' module='threads'>
- <info>DEPRECATED: Internal function, do not use. xmlIsMainThread() check whether the current thread is the main thread.</info>
+ <function name='xmlIsMainThread' file='threads' module='globals'>
+ <info>DEPRECATED: Internal function, do not use. Check whether the current thread is the main thread.</info>
<return type='int' info='1 if the current thread is the main thread, 0 otherwise'/>
</function>
<function name='xmlIsMixedElement' file='valid' module='valid'>
@@ -11840,12 +11727,12 @@ Could we use @subtypes for this?'/>
<arg name='encoder' type='xmlCharEncodingHandlerPtr' info='the encoding converter or NULL'/>
<arg name='compression' type='int' info='the compression ration (0 none, 9 max).'/>
</function>
- <function name='xmlOutputBufferCreateFilenameDefault' file='globals' module='xmlIO'>
+ <function name='xmlOutputBufferCreateFilenameDefault' file='xmlIO' module='xmlIO'>
<info>Registers a callback for URI output file handling</info>
<return type='xmlOutputBufferCreateFilenameFunc' info='the old value of the registration function'/>
<arg name='func' type='xmlOutputBufferCreateFilenameFunc' info='function pointer to the new OutputBufferCreateFilenameFunc'/>
</function>
- <functype name='xmlOutputBufferCreateFilenameFunc' file='globals' module='globals'>
+ <functype name='xmlOutputBufferCreateFilenameFunc' file='xmlIO' module='xmlIO'>
<info>Signature for the function doing the lookup for a suitable output method corresponding to an URI.</info>
<return type='xmlOutputBufferPtr' info='the new xmlOutputBufferPtr in case of success or NULL if no method was found.'/>
<arg name='URI' type='const char *' info='the URI to write to'/>
@@ -11986,7 +11873,7 @@ Could we use @subtypes for this?'/>
<arg name='filename' type='const char *' info='the filename'/>
</function>
<function name='xmlParseCharData' file='parserInternals' module='parser'>
- <info>DEPRECATED: Internal function, don&apos;t use. Parse character data. Always makes progress if the first char isn&apos;t &apos;&lt;&apos; or &apos;&amp;&apos;. if we are within a CDATA section &apos;]]&gt;&apos; marks an end of section. The right angle bracket (&gt;) may be represented using the string &quot;&amp;gt;&quot;, and must, for compatibility, be escaped using &quot;&amp;gt;&quot; or a character reference when it appears in the string &quot;]]&gt;&quot; in content, when that string is not marking the end of a CDATA section. [14] CharData ::= [^&lt;&amp;]* - ([^&lt;&amp;]* &apos;]]&gt;&apos; [^&lt;&amp;]*)</info>
+ <info>DEPRECATED: Internal function, don&apos;t use.</info>
<return type='void'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
<arg name='cdata' type='int' info='unused'/>
@@ -12367,12 +12254,12 @@ Could we use @subtypes for this?'/>
<arg name='URI' type='const char *' info='a C string containing the URI or filename'/>
<arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
</function>
- <function name='xmlParserInputBufferCreateFilenameDefault' file='globals' module='xmlIO'>
+ <function name='xmlParserInputBufferCreateFilenameDefault' file='xmlIO' module='xmlIO'>
<info>Registers a callback for URI input file handling</info>
<return type='xmlParserInputBufferCreateFilenameFunc' info='the old value of the registration function'/>
<arg name='func' type='xmlParserInputBufferCreateFilenameFunc' info='function pointer to the new ParserInputBufferCreateFilenameFunc'/>
</function>
- <functype name='xmlParserInputBufferCreateFilenameFunc' file='globals' module='globals'>
+ <functype name='xmlParserInputBufferCreateFilenameFunc' file='xmlIO' module='xmlIO'>
<info>Signature for the function doing the lookup for a suitable input method corresponding to an URI.</info>
<return type='xmlParserInputBufferPtr' info='the new xmlParserInputBufferPtr in case of success or NULL if no method was found.'/>
<arg name='URI' type='const char *' info='the URI to read from'/>
@@ -12884,12 +12771,12 @@ Could we use @subtypes for this?'/>
<arg name='readFunc' type='xmlInputReadCallback' info='the xmlInputReadCallback'/>
<arg name='closeFunc' type='xmlInputCloseCallback' info='the xmlInputCloseCallback'/>
</function>
- <function name='xmlRegisterNodeDefault' file='globals' module='globals'>
+ <function name='xmlRegisterNodeDefault' file='tree' module='tree'>
<info>Registers a callback for node creation</info>
<return type='xmlRegisterNodeFunc' info='the old value of the registration function'/>
<arg name='func' type='xmlRegisterNodeFunc' info='function pointer to the new RegisterNodeFunc'/>
</function>
- <functype name='xmlRegisterNodeFunc' file='globals' module='globals'>
+ <functype name='xmlRegisterNodeFunc' file='tree' module='tree'>
<info>Signature for the registration callback of a created node</info>
<return type='void'/>
<arg name='node' type='xmlNodePtr' info='the current node'/>
@@ -13552,7 +13439,7 @@ Could we use @subtypes for this?'/>
<info>Save a subtree starting at the node parameter to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead</info>
<return type='long' info='the number of byte written or -1 in case of error'/>
<arg name='ctxt' type='xmlSaveCtxtPtr' info='a document saving context'/>
- <arg name='cur' type='xmlNodePtr' info=''/>
+ <arg name='cur' type='xmlNodePtr' info='the top node of the subtree to save'/>
</function>
<function name='xmlSaveUri' file='uri' module='uri'>
<info>Save the URI as an escaped string</info>
@@ -14606,7 +14493,7 @@ Could we use @subtypes for this?'/>
<info>Signature of the function to use when there is an error and the module handles the new error reporting mechanism.</info>
<return type='void'/>
<arg name='userData' type='void *' info='user provided data for the error callback'/>
- <arg name='error' type='xmlErrorPtr' info='the error being raised.'/>
+ <arg name='error' type='const xmlError *' info='the error being raised.'/>
</functype>
<function name='xmlSubstituteEntitiesDefault' file='parser' module='parserInternals'>
<info>DEPRECATED: Use the modern options API with XML_PARSE_NOENT. Set and return the previous value for default entity support. Initially the parser always keep entity references instead of substituting entity values in the output. This function has to be used to change the default parser behavior SAX::substituteEntities() has to be used for changing that on a file by file basis.</info>
@@ -14614,20 +14501,20 @@ Could we use @subtypes for this?'/>
<arg name='val' type='int' info='int 0 or 1'/>
</function>
<function name='xmlSwitchEncoding' file='parserInternals' module='parserInternals'>
- <info>change the input functions when discovering the character encoding of a given entity.</info>
+ <info>Use encoding specified by enum to decode input data. This function can be used to enforce the encoding of chunks passed to xmlParseChunk.</info>
<return type='int' info='0 in case of success, -1 otherwise'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
<arg name='enc' type='xmlCharEncoding' info='the encoding value (number)'/>
</function>
<function name='xmlSwitchInputEncoding' file='parserInternals' module='parserInternals'>
- <info>change the input functions when discovering the character encoding of a given entity.</info>
+ <info>DEPRECATED: Internal function, don&apos;t use. Use encoding handler to decode input data.</info>
<return type='int' info='0 in case of success, -1 otherwise'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
<arg name='input' type='xmlParserInputPtr' info='the input stream'/>
<arg name='handler' type='xmlCharEncodingHandlerPtr' info='the encoding handler'/>
</function>
<function name='xmlSwitchToEncoding' file='parserInternals' module='parserInternals'>
- <info>change the input functions when discovering the character encoding of a given entity.</info>
+ <info>Use encoding handler to decode input data. This function can be used to enforce the encoding of chunks passed to xmlParseChunk.</info>
<return type='int' info='0 in case of success, -1 otherwise'/>
<arg name='ctxt' type='xmlParserCtxtPtr' info='the parser context'/>
<arg name='handler' type='xmlCharEncodingHandlerPtr' info='the encoding handler'/>
@@ -15062,6 +14949,13 @@ Could we use @subtypes for this?'/>
<arg name='f' type='xmlTextReaderErrorFunc' info='the callback function to call on error and warnings'/>
<arg name='arg' type='void *' info='a user argument to pass to the callback function'/>
</function>
+ <function name='xmlTextReaderSetMaxAmplification' file='xmlreader' module='xmlreader'>
+ <cond>defined(LIBXML_READER_ENABLED)</cond>
+ <info>Set the maximum amplification factor. See xmlCtxtSetMaxAmplification.</info>
+ <return type='void'/>
+ <arg name='reader' type='xmlTextReaderPtr' info='an XML reader'/>
+ <arg name='maxAmpl' type='unsigned' info='maximum amplification factor'/>
+ </function>
<function name='xmlTextReaderSetParserProp' file='xmlreader' module='xmlreader'>
<cond>defined(LIBXML_READER_ENABLED)</cond>
<info>Change the parser processing behaviour by changing some of its internal properties. Note that some properties can only be changed before any read has been done.</info>
@@ -15711,99 +15605,102 @@ Could we use @subtypes for this?'/>
<arg name='format' type='const char *' info='format string (see printf)'/>
<arg name='argptr' type='va_list' info='pointer to the first member of the variable argument list.'/>
</function>
- <function name='xmlThrDefBufferAllocScheme' file='globals' module='globals'>
+ <function name='xmlThrDefBufferAllocScheme' file='tree' module='globals'>
<info></info>
<return type='xmlBufferAllocationScheme' info=''/>
<arg name='v' type='xmlBufferAllocationScheme' info=''/>
</function>
- <function name='xmlThrDefDefaultBufferSize' file='globals' module='globals'>
+ <function name='xmlThrDefDefaultBufferSize' file='tree' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefDeregisterNodeDefault' file='globals' module='globals'>
+ <function name='xmlThrDefDeregisterNodeDefault' file='tree' module='globals'>
<info></info>
<return type='xmlDeregisterNodeFunc' info=''/>
<arg name='func' type='xmlDeregisterNodeFunc' info=''/>
</function>
- <function name='xmlThrDefDoValidityCheckingDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefDoValidityCheckingDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefGetWarningsDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefGetWarningsDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefIndentTreeOutput' file='globals' module='globals'>
+ <function name='xmlThrDefIndentTreeOutput' file='xmlsave' module='globals'>
+ <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefKeepBlanksDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefKeepBlanksDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefLineNumbersDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefLineNumbersDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefLoadExtDtdDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefLoadExtDtdDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefOutputBufferCreateFilenameDefault' file='globals' module='globals'>
+ <function name='xmlThrDefOutputBufferCreateFilenameDefault' file='xmlIO' module='globals'>
<info></info>
<return type='xmlOutputBufferCreateFilenameFunc' info=''/>
<arg name='func' type='xmlOutputBufferCreateFilenameFunc' info=''/>
</function>
- <function name='xmlThrDefParserDebugEntities' file='globals' module='globals'>
+ <function name='xmlThrDefParserDebugEntities' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefParserInputBufferCreateFilenameDefault' file='globals' module='globals'>
+ <function name='xmlThrDefParserInputBufferCreateFilenameDefault' file='xmlIO' module='globals'>
<info></info>
<return type='xmlParserInputBufferCreateFilenameFunc' info=''/>
<arg name='func' type='xmlParserInputBufferCreateFilenameFunc' info=''/>
</function>
- <function name='xmlThrDefPedanticParserDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefPedanticParserDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefRegisterNodeDefault' file='globals' module='globals'>
+ <function name='xmlThrDefRegisterNodeDefault' file='tree' module='globals'>
<info></info>
<return type='xmlRegisterNodeFunc' info=''/>
<arg name='func' type='xmlRegisterNodeFunc' info=''/>
</function>
- <function name='xmlThrDefSaveNoEmptyTags' file='globals' module='globals'>
+ <function name='xmlThrDefSaveNoEmptyTags' file='xmlsave' module='globals'>
+ <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefSetGenericErrorFunc' file='globals' module='globals'>
+ <function name='xmlThrDefSetGenericErrorFunc' file='xmlerror' module='globals'>
<info></info>
<return type='void'/>
<arg name='ctx' type='void *' info=''/>
<arg name='handler' type='xmlGenericErrorFunc' info=''/>
</function>
- <function name='xmlThrDefSetStructuredErrorFunc' file='globals' module='globals'>
+ <function name='xmlThrDefSetStructuredErrorFunc' file='xmlerror' module='globals'>
<info></info>
<return type='void'/>
<arg name='ctx' type='void *' info=''/>
<arg name='handler' type='xmlStructuredErrorFunc' info=''/>
</function>
- <function name='xmlThrDefSubstituteEntitiesDefaultValue' file='globals' module='globals'>
+ <function name='xmlThrDefSubstituteEntitiesDefaultValue' file='parser' module='globals'>
<info></info>
<return type='int' info=''/>
<arg name='v' type='int' info=''/>
</function>
- <function name='xmlThrDefTreeIndentString' file='globals' module='globals'>
+ <function name='xmlThrDefTreeIndentString' file='xmlsave' module='globals'>
+ <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
<info></info>
<return type='const char *' info=''/>
<arg name='v' type='const char *' info=''/>
@@ -16989,7 +16886,7 @@ Could we use @subtypes for this?'/>
<return type='int' info='1 if valid or 0 otherwise'/>
<arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
<arg name='doc' type='xmlDocPtr' info='a document instance'/>
- <arg name='root' type='xmlNodePtr' info=''/>
+ <arg name='root' type='xmlNodePtr' info='an element instance'/>
</function>
<function name='xmlValidateElementDecl' file='valid' module='valid'>
<cond>defined(LIBXML_VALID_ENABLED)</cond>
@@ -17000,7 +16897,6 @@ Could we use @subtypes for this?'/>
<arg name='elem' type='xmlElementPtr' info='an element definition'/>
</function>
<function name='xmlValidateNCName' file='tree' module='tree'>
- <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_LEGACY_ENABLED)</cond>
<info>Check that a value conforms to the lexical space of NCName</info>
<return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
<arg name='value' type='const xmlChar *' info='the value to check'/>
@@ -17622,13 +17518,13 @@ Could we use @subtypes for this?'/>
</function>
<function name='xmlXPathIsInf' file='xpath' module='xpath'>
<cond>defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
- <info></info>
+ <info>Checks whether a double is an infinity.</info>
<return type='int' info='1 if the value is +Infinite, -1 if -Infinite, 0 otherwise'/>
<arg name='val' type='double' info='a double value'/>
</function>
<function name='xmlXPathIsNaN' file='xpath' module='xpath'>
<cond>defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
- <info></info>
+ <info>Checks whether a double is a NaN.</info>
<return type='int' info='1 if the value is a NaN, 0 otherwise'/>
<arg name='val' type='double' info='a double value'/>
</function>
diff --git a/doc/xmlcatalog.1 b/doc/xmlcatalog.1
index 15ab9f73..0e1c1afe 100644
--- a/doc/xmlcatalog.1
+++ b/doc/xmlcatalog.1
@@ -2,12 +2,12 @@
.\" Title: xmlcatalog
.\" Author: John Fleck <jfleck@inkstain.net>
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 04/26/2023
+.\" Date: 11/04/2023
.\" Manual: xmlcatalog Manual
.\" Source: libxml2
.\" Language: English
.\"
-.TH "XMLCATALOG" "1" "04/26/2023" "libxml2" "xmlcatalog Manual"
+.TH "XMLCATALOG" "1" "11/04/2023" "libxml2" "xmlcatalog Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/xmllint.1 b/doc/xmllint.1
index a6b9ba6e..538bf4b8 100644
--- a/doc/xmllint.1
+++ b/doc/xmllint.1
@@ -2,12 +2,12 @@
.\" Title: xmllint
.\" Author: John Fleck <jfleck@inkstain.net>
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 04/26/2023
+.\" Date: 11/04/2023
.\" Manual: xmllint Manual
.\" Source: libxml2
.\" Language: English
.\"
-.TH "XMLLINT" "1" "04/26/2023" "libxml2" "xmllint Manual"
+.TH "XMLLINT" "1" "11/04/2023" "libxml2" "xmllint Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -31,7 +31,7 @@
xmllint \- command line XML tool
.SH "SYNOPSIS"
.HP \w'\fBxmllint\fR\ 'u
-\fBxmllint\fR [\fB\-\-version\fR | \fB\-\-debug\fR | \fB\-\-quiet\fR | \fB\-\-shell\fR | \fB\-\-xpath\ "\fR\fB\fIXPath_expression\fR\fR\fB"\fR | \fB\-\-debugent\fR | \fB\-\-copy\fR | \fB\-\-recover\fR | \fB\-\-nodict\fR | \fB\-\-noent\fR | \fB\-\-noout\fR | \fB\-\-nonet\fR | \fB\-\-path\ "\fR\fB\fIPATH(S)\fR\fR\fB"\fR | \fB\-\-load\-trace\fR | \fB\-\-htmlout\fR | \fB\-\-nowrap\fR | \fB\-\-valid\fR | \fB\-\-postvalid\fR | \fB\-\-dtdvalid\ \fR\fB\fIURL\fR\fR | \fB\-\-dtdvalidfpi\ \fR\fB\fIFPI\fR\fR | \fB\-\-timing\fR | \fB\-\-output\ \fR\fB\fIFILE\fR\fR | \fB\-\-repeat\fR | \fB\-\-insert\fR | \fB\-\-compress\fR | \fB\-\-html\fR | \fB\-\-xmlout\fR | \fB\-\-push\fR | \fB\-\-memory\fR | \fB\-\-maxmem\ \fR\fB\fINBBYTES\fR\fR | \fB\-\-nowarning\fR | \fB\-\-noblanks\fR | \fB\-\-nocdata\fR | \fB\-\-format\fR | \fB\-\-encode\ \fR\fB\fIENCODING\fR\fR | \fB\-\-dropdtd\fR | \fB\-\-nsclean\fR | \fB\-\-testIO\fR | \fB\-\-catalogs\fR | \fB\-\-nocatalogs\fR | \fB\-\-auto\fR | \fB\-\-xinclude\fR | \fB\-\-noxincludenode\fR | \fB\-\-loaddtd\fR | \fB\-\-dtdattr\fR | \fB\-\-stream\fR | \fB\-\-walker\fR | \fB\-\-pattern\ \fR\fB\fIPATTERNVALUE\fR\fR | \fB\-\-chkregister\fR | \fB\-\-relaxng\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-schema\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-c14n\fR | \fB\-\-pedantic\fR] {\fIXML\-FILE(S)\fR... | \-}
+\fBxmllint\fR [\fB\-\-version\fR | \fB\-\-debug\fR | \fB\-\-quiet\fR | \fB\-\-shell\fR | \fB\-\-xpath\ "\fR\fB\fIXPath_expression\fR\fR\fB"\fR | \fB\-\-debugent\fR | \fB\-\-copy\fR | \fB\-\-recover\fR | \fB\-\-nodict\fR | \fB\-\-noent\fR | \fB\-\-noout\fR | \fB\-\-nonet\fR | \fB\-\-path\ "\fR\fB\fIPATH(S)\fR\fR\fB"\fR | \fB\-\-load\-trace\fR | \fB\-\-htmlout\fR | \fB\-\-nowrap\fR | \fB\-\-valid\fR | \fB\-\-postvalid\fR | \fB\-\-dtdvalid\ \fR\fB\fIURL\fR\fR | \fB\-\-dtdvalidfpi\ \fR\fB\fIFPI\fR\fR | \fB\-\-timing\fR | \fB\-\-output\ \fR\fB\fIFILE\fR\fR | \fB\-\-repeat\fR | \fB\-\-insert\fR | \fB\-\-compress\fR | \fB\-\-html\fR | \fB\-\-xmlout\fR | \fB\-\-push\fR | \fB\-\-memory\fR | \fB\-\-max\-ampl\ \fR\fB\fIINTEGER\fR\fR | \fB\-\-maxmem\ \fR\fB\fINBBYTES\fR\fR | \fB\-\-nowarning\fR | \fB\-\-noblanks\fR | \fB\-\-nocdata\fR | \fB\-\-format\fR | \fB\-\-encode\ \fR\fB\fIENCODING\fR\fR | \fB\-\-dropdtd\fR | \fB\-\-nsclean\fR | \fB\-\-testIO\fR | \fB\-\-catalogs\fR | \fB\-\-nocatalogs\fR | \fB\-\-auto\fR | \fB\-\-xinclude\fR | \fB\-\-noxincludenode\fR | \fB\-\-loaddtd\fR | \fB\-\-dtdattr\fR | \fB\-\-stream\fR | \fB\-\-walker\fR | \fB\-\-pattern\ \fR\fB\fIPATTERNVALUE\fR\fR | \fB\-\-chkregister\fR | \fB\-\-relaxng\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-schema\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-c14n\fR | \fB\-\-pedantic\fR] {\fIXML\-FILE(S)\fR... | \-}
.HP \w'\fBxmllint\fR\ 'u
\fBxmllint\fR \fB\-\-help\fR
.SH "DESCRIPTION"
@@ -199,6 +199,11 @@ Display all the documents loaded during the processing to
stderr\&.
.RE
.PP
+\fB\-\-max\-ampl \fR\fB\fIINTEGER\fR\fR
+.RS 4
+Set the maximum amplification factor which protects against exponential entity expansion ("billion laughs")\&. The default value is 5\&. Documents making heavy use of entity expansion may require a higher value\&.
+.RE
+.PP
\fB\-\-maxmem \fR\fB\fINNBYTES\fR\fR
.RS 4
Test the parser memory support\&.
diff --git a/doc/xmllint.html b/doc/xmllint.html
index 9e2e7ce6..e128c393 100644
--- a/doc/xmllint.html
+++ b/doc/xmllint.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xmllint</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="idm1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>xmllint &#8212; command line <acronym class="acronym">XML</acronym> tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">xmllint</code> [ <code class="option">--version</code> | <code class="option">--debug</code> | <code class="option">--quiet</code> | <code class="option">--shell</code> | <code class="option">--xpath "<em class="replaceable"><code>XPath_expression</code></em>"</code> | <code class="option">--debugent</code> | <code class="option">--copy</code> | <code class="option">--recover</code> | <code class="option">--nodict</code> | <code class="option">--noent</code> | <code class="option">--noout</code> | <code class="option">--nonet</code> | <code class="option">--path "<em class="replaceable"><code>PATH(S)</code></em>"</code> | <code class="option">--load-trace</code> | <code class="option">--htmlout</code> | <code class="option">--nowrap</code> | <code class="option">--valid</code> | <code class="option">--postvalid</code> | <code class="option">--dtdvalid <em class="replaceable"><code>URL</code></em></code> | <code class="option">--dtdvalidfpi <em class="replaceable"><code>FPI</code></em></code> | <code class="option">--timing</code> | <code class="option">--output <em class="replaceable"><code>FILE</code></em></code> | <code class="option">--repeat</code> | <code class="option">--insert</code> | <code class="option">--compress</code> | <code class="option">--html</code> | <code class="option">--xmlout</code> | <code class="option">--push</code> | <code class="option">--memory</code> | <code class="option">--maxmem <em class="replaceable"><code>NBBYTES</code></em></code> | <code class="option">--nowarning</code> | <code class="option">--noblanks</code> | <code class="option">--nocdata</code> | <code class="option">--format</code> | <code class="option">--encode <em class="replaceable"><code>ENCODING</code></em></code> | <code class="option">--dropdtd</code> | <code class="option">--nsclean</code> | <code class="option">--testIO</code> | <code class="option">--catalogs</code> | <code class="option">--nocatalogs</code> | <code class="option">--auto</code> | <code class="option">--xinclude</code> | <code class="option">--noxincludenode</code> | <code class="option">--loaddtd</code> | <code class="option">--dtdattr</code> | <code class="option">--stream</code> | <code class="option">--walker</code> | <code class="option">--pattern <em class="replaceable"><code>PATTERNVALUE</code></em></code> | <code class="option">--chkregister</code> | <code class="option">--relaxng <em class="replaceable"><code>SCHEMA</code></em></code> | <code class="option">--schema <em class="replaceable"><code>SCHEMA</code></em></code> | <code class="option">--c14n</code> | <code class="option">--pedantic</code> ] { <em class="replaceable"><code>XML-FILE(S)</code></em>... | - }</p></div><div class="cmdsynopsis"><p><code class="command">xmllint</code> <code class="option">--help</code> </p></div></div><div class="refsect1"><a name="description"></a><h2>DESCRIPTION</h2><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xmllint</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="idm1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>xmllint &#8212; command line <acronym class="acronym">XML</acronym> tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">xmllint</code> [ <code class="option">--version</code> | <code class="option">--debug</code> | <code class="option">--quiet</code> | <code class="option">--shell</code> | <code class="option">--xpath "<em class="replaceable"><code>XPath_expression</code></em>"</code> | <code class="option">--debugent</code> | <code class="option">--copy</code> | <code class="option">--recover</code> | <code class="option">--nodict</code> | <code class="option">--noent</code> | <code class="option">--noout</code> | <code class="option">--nonet</code> | <code class="option">--path "<em class="replaceable"><code>PATH(S)</code></em>"</code> | <code class="option">--load-trace</code> | <code class="option">--htmlout</code> | <code class="option">--nowrap</code> | <code class="option">--valid</code> | <code class="option">--postvalid</code> | <code class="option">--dtdvalid <em class="replaceable"><code>URL</code></em></code> | <code class="option">--dtdvalidfpi <em class="replaceable"><code>FPI</code></em></code> | <code class="option">--timing</code> | <code class="option">--output <em class="replaceable"><code>FILE</code></em></code> | <code class="option">--repeat</code> | <code class="option">--insert</code> | <code class="option">--compress</code> | <code class="option">--html</code> | <code class="option">--xmlout</code> | <code class="option">--push</code> | <code class="option">--memory</code> | <code class="option">--max-ampl <em class="replaceable"><code>INTEGER</code></em></code> | <code class="option">--maxmem <em class="replaceable"><code>NBBYTES</code></em></code> | <code class="option">--nowarning</code> | <code class="option">--noblanks</code> | <code class="option">--nocdata</code> | <code class="option">--format</code> | <code class="option">--encode <em class="replaceable"><code>ENCODING</code></em></code> | <code class="option">--dropdtd</code> | <code class="option">--nsclean</code> | <code class="option">--testIO</code> | <code class="option">--catalogs</code> | <code class="option">--nocatalogs</code> | <code class="option">--auto</code> | <code class="option">--xinclude</code> | <code class="option">--noxincludenode</code> | <code class="option">--loaddtd</code> | <code class="option">--dtdattr</code> | <code class="option">--stream</code> | <code class="option">--walker</code> | <code class="option">--pattern <em class="replaceable"><code>PATTERNVALUE</code></em></code> | <code class="option">--chkregister</code> | <code class="option">--relaxng <em class="replaceable"><code>SCHEMA</code></em></code> | <code class="option">--schema <em class="replaceable"><code>SCHEMA</code></em></code> | <code class="option">--c14n</code> | <code class="option">--pedantic</code> ] { <em class="replaceable"><code>XML-FILE(S)</code></em>... | - }</p></div><div class="cmdsynopsis"><p><code class="command">xmllint</code> <code class="option">--help</code> </p></div></div><div class="refsect1"><a name="description"></a><h2>DESCRIPTION</h2><p>
The <span class="command"><strong>xmllint</strong></span> program parses one or more <acronym class="acronym">XML</acronym> files,
specified on the command line as <em class="replaceable"><code>XML-FILE</code></em>
(or the standard input if the filename provided
@@ -46,6 +46,11 @@
</p></dd><dt><span class="term"><code class="option">--insert</code></span></dt><dd><p>Test for valid insertions.</p></dd><dt><span class="term"><code class="option">--loaddtd</code></span></dt><dd><p>Fetch an external <acronym class="acronym">DTD</acronym>.</p></dd><dt><span class="term"><code class="option">--load-trace</code></span></dt><dd><p>
Display all the documents loaded during the processing
to <code class="filename">stderr</code>.
+ </p></dd><dt><span class="term"><code class="option">--max-ampl <em class="replaceable"><code>INTEGER</code></em></code></span></dt><dd><p>
+ Set the maximum amplification factor which protects against
+ exponential entity expansion ("billion laughs"). The default value
+ is 5. Documents making heavy use of entity expansion may require a
+ higher value.
</p></dd><dt><span class="term"><code class="option">--maxmem <em class="replaceable"><code>NNBYTES</code></em></code></span></dt><dd><p>
Test the parser memory support. <em class="replaceable"><code>NNBYTES</code></em>
is the maximum number of bytes the library is allowed to allocate.
diff --git a/encoding.c b/encoding.c
index aa516ede..bc2772da 100644
--- a/encoding.c
+++ b/encoding.c
@@ -1989,9 +1989,22 @@ xmlEncInputChunk(xmlCharEncodingHandler *handler, unsigned char *out,
int ret;
if (handler->input != NULL) {
+ int oldinlen = *inlen;
+
ret = handler->input(out, outlen, in, inlen);
- if (ret > 0)
- ret = XML_ENC_ERR_SUCCESS;
+ if (ret >= 0) {
+ /*
+ * The built-in converters don't signal XML_ENC_ERR_SPACE.
+ */
+ if (*inlen < oldinlen) {
+ if (*outlen > 0)
+ ret = XML_ENC_ERR_SPACE;
+ else
+ ret = XML_ENC_ERR_PARTIAL;
+ } else {
+ ret = XML_ENC_ERR_SUCCESS;
+ }
+ }
}
#ifdef LIBXML_ICONV_ENABLED
else if (handler->iconv_in != NULL) {
@@ -2036,9 +2049,22 @@ xmlEncOutputChunk(xmlCharEncodingHandler *handler, unsigned char *out,
int ret;
if (handler->output != NULL) {
+ int oldinlen = *inlen;
+
ret = handler->output(out, outlen, in, inlen);
- if (ret > 0)
- ret = XML_ENC_ERR_SUCCESS;
+ if (ret >= 0) {
+ /*
+ * The built-in converters don't signal XML_ENC_ERR_SPACE.
+ */
+ if (*inlen < oldinlen) {
+ if (*outlen > 0)
+ ret = XML_ENC_ERR_SPACE;
+ else
+ ret = XML_ENC_ERR_PARTIAL;
+ } else {
+ ret = XML_ENC_ERR_SUCCESS;
+ }
+ }
}
#ifdef LIBXML_ICONV_ENABLED
else if (handler->iconv_out != NULL) {
diff --git a/error.c b/error.c
index 1b4fe767..c87cf2aa 100644
--- a/error.c
+++ b/error.c
@@ -939,7 +939,7 @@ xmlResetLastError(void)
*
* Returns NULL if no error occurred or a pointer to the error
*/
-xmlErrorPtr
+const xmlError *
xmlCtxtGetLastError(void *ctx)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
diff --git a/globals.c b/globals.c
index 157f7f0c..a786a4b9 100644
--- a/globals.c
+++ b/globals.c
@@ -754,12 +754,20 @@ xmlInitGlobalState(xmlGlobalStatePtr gs) {
gs->gs_xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
gs->gs_xmlDoValidityCheckingDefaultValue =
xmlDoValidityCheckingDefaultValueThrDef;
-#if defined(DEBUG_MEMORY_LOCATION)
- gs->gs_xmlFree = (xmlFreeFunc) xmlMemFree;
- gs->gs_xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
- gs->gs_xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
- gs->gs_xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
- gs->gs_xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+#ifdef DEBUG_MEMORY_LOCATION
+ gs->gs_xmlFree = xmlMemFree;
+ gs->gs_xmlMalloc = xmlMemMalloc;
+ gs->gs_xmlMallocAtomic = xmlMemMalloc;
+ gs->gs_xmlRealloc = xmlMemRealloc;
+ gs->gs_xmlMemStrdup = xmlMemoryStrdup;
+#else
+ gs->gs_xmlFree = free;
+ gs->gs_xmlMalloc = malloc;
+ gs->gs_xmlMallocAtomic = malloc;
+ gs->gs_xmlRealloc = realloc;
+ gs->gs_xmlMemStrdup = xmlPosixStrdup;
+#endif
#endif
gs->gs_xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
#ifdef LIBXML_OUTPUT_ENABLED
diff --git a/hash.c b/hash.c
index dcda199c..f3ec6396 100644
--- a/hash.c
+++ b/hash.c
@@ -632,6 +632,8 @@ xmlHashAddEntry(xmlHashTablePtr hash, const xmlChar *key, void *payload) {
* Add a hash table entry with two strings as key.
*
* See xmlHashAddEntry.
+ *
+ * Returns 0 on success and -1 in case of error.
*/
int
xmlHashAddEntry2(xmlHashTablePtr hash, const xmlChar *key,
@@ -650,6 +652,8 @@ xmlHashAddEntry2(xmlHashTablePtr hash, const xmlChar *key,
* Add a hash table entry with three strings as key.
*
* See xmlHashAddEntry.
+ *
+ * Returns 0 on success and -1 in case of error.
*/
int
xmlHashAddEntry3(xmlHashTablePtr hash, const xmlChar *key,
@@ -688,6 +692,8 @@ xmlHashUpdateEntry(xmlHashTablePtr hash, const xmlChar *key,
* Add a hash table entry with two strings as key.
*
* See xmlHashUpdateEntry.
+ *
+ * Returns 0 on success and -1 in case of error.
*/
int
xmlHashUpdateEntry2(xmlHashTablePtr hash, const xmlChar *key,
@@ -709,6 +715,8 @@ xmlHashUpdateEntry2(xmlHashTablePtr hash, const xmlChar *key,
* Add a hash table entry with three strings as key.
*
* See xmlHashUpdateEntry.
+ *
+ * Returns 0 on success and -1 in case of error.
*/
int
xmlHashUpdateEntry3(xmlHashTablePtr hash, const xmlChar *key,
@@ -1054,6 +1062,8 @@ int xmlHashRemoveEntry(xmlHashTablePtr hash, const xmlChar *key,
* Remove an entry with two strings as key.
*
* See xmlHashRemoveEntry.
+ *
+ * Returns 0 on success and -1 in case of error.
*/
int
xmlHashRemoveEntry2(xmlHashTablePtr hash, const xmlChar *key,
@@ -1072,6 +1082,8 @@ xmlHashRemoveEntry2(xmlHashTablePtr hash, const xmlChar *key,
* Remove an entry with three strings as key.
*
* See xmlHashRemoveEntry.
+ *
+ * Returns 0 on success and -1 in case of error.
*/
ATTRIBUTE_NO_SANITIZE_INTEGER
int
diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h
index 2d3651ec..2dd792ac 100644
--- a/include/libxml/xmlerror.h
+++ b/include/libxml/xmlerror.h
@@ -856,7 +856,7 @@ typedef void (*xmlGenericErrorFunc) (void *ctx,
* Signature of the function to use when there is an error and
* the module handles the new error reporting mechanism.
*/
-typedef void (*xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
+typedef void (*xmlStructuredErrorFunc) (void *userData, const xmlError *error);
/** DOC_DISABLE */
#define XML_GLOBALS_ERROR \
@@ -932,7 +932,7 @@ XMLPUBFUN const xmlError *
xmlGetLastError (void);
XMLPUBFUN void
xmlResetLastError (void);
-XMLPUBFUN xmlErrorPtr
+XMLPUBFUN const xmlError *
xmlCtxtGetLastError (void *ctx);
XMLPUBFUN void
xmlCtxtResetLastError (void *ctx);
diff --git a/include/libxml/xmlmemory.h b/include/libxml/xmlmemory.h
index 1a43882c..a3e26ddc 100644
--- a/include/libxml/xmlmemory.h
+++ b/include/libxml/xmlmemory.h
@@ -80,7 +80,7 @@ typedef char *(*xmlStrdupFunc)(const char *str);
#define XML_OP XML_DECLARE_GLOBAL
XML_GLOBALS_ALLOC
#undef XML_OP
- #ifdef LIBXML_THREAD_ENABLED
+ #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
#define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
#define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
#define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)
diff --git a/include/private/dict.h b/include/private/dict.h
index 21084a7d..9b0be621 100644
--- a/include/private/dict.h
+++ b/include/private/dict.h
@@ -55,9 +55,11 @@ xmlInitDictInternal(void);
XML_HIDDEN void
xmlCleanupDictInternal(void);
-unsigned
+XML_HIDDEN unsigned
xmlDictComputeHash(const xmlDict *dict, const xmlChar *string);
-xmlHashedString
+XML_HIDDEN unsigned
+xmlDictCombineHash(unsigned v1, unsigned v2);
+XML_HIDDEN xmlHashedString
xmlDictLookupHashed(xmlDictPtr dict, const xmlChar *name, int len);
XML_HIDDEN void
diff --git a/include/private/parser.h b/include/private/parser.h
index 02a4ab09..40d179fe 100644
--- a/include/private/parser.h
+++ b/include/private/parser.h
@@ -24,7 +24,7 @@
#define XML_INPUT_AUTO_UTF16BE (3u << 1)
#define XML_INPUT_AUTO_OTHER (4u << 1)
#define XML_INPUT_USES_ENC_DECL (1u << 4)
-#define XML_INPUT_8_BIT (1u << 5)
+#define XML_INPUT_ENCODING_ERROR (1u << 5)
XML_HIDDEN void
xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra);
diff --git a/parser.c b/parser.c
index a54d0421..a8835812 100644
--- a/parser.c
+++ b/parser.c
@@ -111,7 +111,6 @@ struct _xmlParserNsData {
};
struct _xmlAttrHashBucket {
- unsigned hashValue;
int index;
};
@@ -2261,8 +2260,11 @@ static int spacePop(xmlParserCtxtPtr ctxt) {
xmlParserGrow(ctxt); \
} while (0)
-#define SHRINK if ((ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \
- (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \
+/* Don't shrink push parser buffer. */
+#define SHRINK \
+ if (((ctxt->progressive == 0) || (ctxt->inputNr > 1)) && \
+ (ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \
+ (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \
xmlParserShrink(ctxt);
#define GROW if (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK) \
@@ -2289,8 +2291,8 @@ static int spacePop(xmlParserCtxtPtr ctxt) {
#define CUR_CHAR(l) xmlCurrentChar(ctxt, &l)
#define CUR_SCHAR(s, l) xmlStringCurrentChar(ctxt, s, &l)
-#define COPY_BUF(l,b,i,v) \
- if (l == 1) b[i++] = v; \
+#define COPY_BUF(b, i, v) \
+ if (v < 0x80) b[i++] = v; \
else i += xmlCopyCharMultiByte(&b[i],v)
/**
@@ -2840,7 +2842,7 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
int val = xmlParseStringCharRef(ctxt, &str);
if (val == 0)
goto int_error;
- COPY_BUF(0,buffer,nbchars,val);
+ COPY_BUF(buffer, nbchars, val);
if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
}
@@ -2853,7 +2855,7 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
if ((ent != NULL) &&
(ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
if (ent->content != NULL) {
- COPY_BUF(0,buffer,nbchars,ent->content[0]);
+ COPY_BUF(buffer, nbchars, ent->content[0]);
if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
}
@@ -2964,7 +2966,7 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
rep = NULL;
}
} else {
- COPY_BUF(l,buffer,nbchars,c);
+ COPY_BUF(buffer, nbchars, c);
str += l;
if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
@@ -3739,11 +3741,11 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) {
return(NULL);
}
- COPY_BUF(l,buf,len,c);
+ COPY_BUF(buf, len, c);
cur += l;
c = CUR_SCHAR(cur, l);
while (xmlIsNameChar(ctxt, c)) {
- COPY_BUF(l,buf,len,c);
+ COPY_BUF(buf, len, c);
cur += l;
c = CUR_SCHAR(cur, l);
if (len >= XML_MAX_NAMELEN) { /* test bigentname.xml */
@@ -3773,7 +3775,7 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) {
}
buffer = tmp;
}
- COPY_BUF(l,buffer,len,c);
+ COPY_BUF(buffer, len, c);
cur += l;
c = CUR_SCHAR(cur, l);
if (len > maxLength) {
@@ -3822,7 +3824,7 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
c = CUR_CHAR(l);
while (xmlIsNameChar(ctxt, c)) {
- COPY_BUF(l,buf,len,c);
+ COPY_BUF(buf, len, c);
NEXTL(l);
c = CUR_CHAR(l);
if (len >= XML_MAX_NAMELEN) {
@@ -3852,7 +3854,7 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
}
buffer = tmp;
}
- COPY_BUF(l,buffer,len,c);
+ COPY_BUF(buffer, len, c);
if (len > maxLength) {
xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken");
xmlFree(buffer);
@@ -3954,7 +3956,7 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
}
buf = tmp;
}
- COPY_BUF(l,buf,len,c);
+ COPY_BUF(buf, len, c);
NEXTL(l);
GROW;
@@ -4238,7 +4240,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
if ((c == 0x20) || (c == 0xD) || (c == 0xA) || (c == 0x9)) {
if ((len != 0) || (!normalize)) {
if ((!normalize) || (!in_space)) {
- COPY_BUF(l,buf,len,0x20);
+ COPY_BUF(buf, len, 0x20);
while (len + 10 > buf_size) {
growBuffer(buf, 10);
}
@@ -4247,7 +4249,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
}
} else {
in_space = 0;
- COPY_BUF(l,buf,len,c);
+ COPY_BUF(buf, len, c);
if (len + 10 > buf_size) {
growBuffer(buf, 10);
}
@@ -4394,7 +4396,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
}
buf = tmp;
}
- COPY_BUF(l,buf,len,cur);
+ COPY_BUF(buf, len, cur);
if (len > maxLength) {
xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "SystemLiteral");
xmlFree(buf);
@@ -4714,11 +4716,11 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int partial) {
cur = CUR_CHAR(l);
while ((cur != '<') && /* checked */
(cur != '&') &&
- (IS_CHAR(cur))) /* test also done in xmlCurrentChar() */ {
+ (IS_CHAR(cur))) {
if ((cur == ']') && (NXT(1) == ']') && (NXT(2) == '>')) {
xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL);
}
- COPY_BUF(l,buf,nbchar,cur);
+ COPY_BUF(buf, nbchar, cur);
/* move current position before possible calling of ctxt->sax->characters */
NEXTL(l);
if (nbchar >= XML_PARSER_BIG_BUFFER_SIZE) {
@@ -4961,7 +4963,7 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf,
buf = new_buf;
size = new_size;
}
- COPY_BUF(ql,buf,len,q);
+ COPY_BUF(buf, len, q);
if (len > maxLength) {
xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
"Comment too big found", NULL);
@@ -5383,7 +5385,7 @@ xmlParsePI(xmlParserCtxtPtr ctxt) {
buf = tmp;
size = new_size;
}
- COPY_BUF(l,buf,len,cur);
+ COPY_BUF(buf, len, cur);
if (len > maxLength) {
xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
"PI %s too big found", target);
@@ -7243,7 +7245,7 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
/*
* Just encode the value in UTF-8
*/
- COPY_BUF(0, out, i, value);
+ COPY_BUF(out, i, value);
out[i] = 0;
if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
(!ctxt->disableSAX))
@@ -9387,20 +9389,14 @@ xmlParseAttribute2(xmlParserCtxtPtr ctxt,
return (hname);
}
-ATTRIBUTE_NO_SANITIZE_INTEGER
-static unsigned
-xmlCombineHash(unsigned v1, unsigned v2) {
- return(HASH_ROL(v1, 15) ^ v2);
-}
-
/**
* xmlAttrHashInsert:
* @ctxt: parser context
- * @aindex: attribute index (this is a multiple of 5)
- * @sizePtr: size of the hash table (input/output value)
+ * @size: size of the hash table
* @name: attribute name
* @uri: namespace uri
* @hashValue: combined hash value of name and uri
+ * @aindex: attribute index (this is a multiple of 5)
*
* Inserts a new attribute into the hash table.
*
@@ -9408,120 +9404,35 @@ xmlCombineHash(unsigned v1, unsigned v2) {
* index if an attribute was found, -1 if a memory allocation failed.
*/
static int
-xmlAttrHashInsert(xmlParserCtxtPtr ctxt, int aindex, unsigned *sizePtr,
- const xmlChar *name, const xmlChar *uri,
- unsigned hashValue) {
+xmlAttrHashInsert(xmlParserCtxtPtr ctxt, unsigned size, const xmlChar *name,
+ const xmlChar *uri, unsigned hashValue, int aindex) {
xmlAttrHashBucket *table = ctxt->attrHash;
xmlAttrHashBucket *bucket;
unsigned hindex;
- unsigned size = *sizePtr;
-
- if (size > 0) {
- hindex = hashValue & (size - 1);
- bucket = &table[hindex];
-
- while (bucket->hashValue != 0) {
- const xmlChar **atts = &ctxt->atts[bucket->index];
-
- if (name == atts[0]) {
- int nsIndex = (int) (ptrdiff_t) atts[2];
-
- if ((nsIndex == NS_INDEX_EMPTY) ? (uri == NULL) :
- (nsIndex == NS_INDEX_XML) ? (uri == ctxt->str_xml) :
- (uri == ctxt->nsTab[nsIndex * 2 + 1]))
- return(bucket->index);
- }
-
- hindex++;
- bucket++;
- if (hindex >= size) {
- hindex = 0;
- bucket = table;
- }
- }
- }
- /*
- * Grow hash table
- */
- if ((unsigned) aindex / 5 >= size / 2) {
- xmlAttrHashBucket *newTable;
- unsigned newSize, i, nindex;
+ hindex = hashValue & (size - 1);
+ bucket = &table[hindex];
- newSize = size ? size * 2 : 8;
+ while (bucket->index >= 0) {
+ const xmlChar **atts = &ctxt->atts[bucket->index];
- if (newSize > ctxt->attrHashMax) {
- newTable = xmlRealloc(table, newSize * sizeof(newTable[0]));
- if (newTable == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(-1);
- }
+ if (name == atts[0]) {
+ int nsIndex = (int) (ptrdiff_t) atts[2];
- table = newTable;
- ctxt->attrHash = newTable;
- ctxt->attrHashMax = newSize;
+ if ((nsIndex == NS_INDEX_EMPTY) ? (uri == NULL) :
+ (nsIndex == NS_INDEX_XML) ? (uri == ctxt->str_xml) :
+ (uri == ctxt->nsTab[nsIndex * 2 + 1]))
+ return(bucket->index);
}
- memset(&table[size], 0, (newSize - size) * sizeof(table[0]));
-
- if (size > 0) {
- /*
- * We must search for the start of a probe sequence to make
- * in-place operation work.
- */
+ hindex++;
+ bucket++;
+ if (hindex >= size) {
hindex = 0;
bucket = table;
- while (bucket->hashValue != 0) {
- hindex++;
- bucket++;
- }
-
- for (i = 0; i < size; i++) {
- if (bucket->hashValue != 0) {
- nindex = bucket->hashValue & (newSize - 1);
-
- while (nindex != hindex) {
- if (table[nindex].hashValue == 0) {
- table[nindex] = *bucket;
- bucket->hashValue = 0;
- break;
- }
-
- nindex++;
- if (nindex >= newSize)
- nindex = 0;
- }
- }
-
- hindex++;
- bucket++;
- if (hindex >= size) {
- hindex = 0;
- bucket = table;
- }
- }
- }
-
- size = newSize;
- *sizePtr = newSize;
-
- /*
- * Relookup
- */
- hindex = hashValue & (size - 1);
- bucket = &table[hindex];
-
- while (bucket->hashValue != 0) {
- hindex++;
- bucket++;
- if (hindex >= size) {
- hindex = 0;
- bucket = table;
- }
}
}
- bucket->hashValue = hashValue;
bucket->index = aindex;
return(INT_MAX);
@@ -9573,7 +9484,7 @@ xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref,
unsigned attrHashSize = 0;
int maxatts = ctxt->maxatts;
int nratts, nbatts, nbdef, inputid;
- int i, j, nbNs, attval, nsIndex;
+ int i, j, nbNs, nbTotalDef, attval, nsIndex, maxAtts;
int alloc = 0;
if (RAW != '<') return(NULL);
@@ -9584,6 +9495,7 @@ xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref,
nratts = 0;
nbdef = 0;
nbNs = 0;
+ nbTotalDef = 0;
attval = 0;
if (xmlParserNsStartElement(ctxt->nsdb) < 0) {
@@ -9851,7 +9763,9 @@ next_attr:
if (xmlParserNsPush(ctxt, &attr->name, &attr->value,
NULL, 1) > 0)
nbNs++;
- }
+ } else {
+ nbTotalDef += 1;
+ }
}
}
}
@@ -9886,51 +9800,77 @@ next_attr:
}
/*
+ * Maximum number of attributes including default attributes.
+ */
+ maxAtts = nratts + nbTotalDef;
+
+ /*
* Verify that attribute names are unique.
*/
- for (i = 0, j = 0; j < nratts; i += 5, j++) {
- const xmlChar *nsuri;
- unsigned hashValue, nameHashValue, uriHashValue;
- int res;
+ if (maxAtts > 1) {
+ attrHashSize = 4;
+ while (attrHashSize / 2 < (unsigned) maxAtts)
+ attrHashSize *= 2;
- attname = atts[i];
- aprefix = atts[i+1];
- nsIndex = (ptrdiff_t) atts[i+2];
- /* Hash values always have bit 31 set, see dict.c */
- nameHashValue = ctxt->attallocs[j] | 0x80000000;
-
- if (nsIndex == NS_INDEX_EMPTY) {
- nsuri = NULL;
- uriHashValue = URI_HASH_EMPTY;
- } else if (nsIndex == NS_INDEX_XML) {
- nsuri = ctxt->str_xml_ns;
- uriHashValue = URI_HASH_XML;
- } else {
- nsuri = ctxt->nsTab[nsIndex * 2 + 1];
- uriHashValue = ctxt->nsdb->extra[nsIndex].uriHashValue;
- }
+ if (attrHashSize > ctxt->attrHashMax) {
+ xmlAttrHashBucket *tmp;
+
+ tmp = xmlRealloc(ctxt->attrHash, attrHashSize * sizeof(tmp[0]));
+ if (tmp == NULL) {
+ xmlErrMemory(ctxt, NULL);
+ goto done;
+ }
- hashValue = xmlCombineHash(nameHashValue, uriHashValue);
- res = xmlAttrHashInsert(ctxt, i, &attrHashSize, attname, nsuri,
- hashValue);
- if (res < 0)
- continue;
+ ctxt->attrHash = tmp;
+ ctxt->attrHashMax = attrHashSize;
+ }
- /*
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same
- * start-tag or empty-element tag.
- * As extended by the Namespace in XML REC.
- */
- if (res < INT_MAX) {
- if (aprefix == atts[res+1]) {
- xmlErrAttributeDup(ctxt, aprefix, attname);
+ memset(ctxt->attrHash, -1, attrHashSize * sizeof(ctxt->attrHash[0]));
+
+ for (i = 0, j = 0; j < nratts; i += 5, j++) {
+ const xmlChar *nsuri;
+ unsigned hashValue, nameHashValue, uriHashValue;
+ int res;
+
+ attname = atts[i];
+ aprefix = atts[i+1];
+ nsIndex = (ptrdiff_t) atts[i+2];
+ /* Hash values always have bit 31 set, see dict.c */
+ nameHashValue = ctxt->attallocs[j] | 0x80000000;
+
+ if (nsIndex == NS_INDEX_EMPTY) {
+ nsuri = NULL;
+ uriHashValue = URI_HASH_EMPTY;
+ } else if (nsIndex == NS_INDEX_XML) {
+ nsuri = ctxt->str_xml_ns;
+ uriHashValue = URI_HASH_XML;
} else {
- xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED,
- "Namespaced Attribute %s in '%s' redefined\n",
- attname, nsuri, NULL);
+ nsuri = ctxt->nsTab[nsIndex * 2 + 1];
+ uriHashValue = ctxt->nsdb->extra[nsIndex].uriHashValue;
}
- }
+
+ hashValue = xmlDictCombineHash(nameHashValue, uriHashValue);
+ res = xmlAttrHashInsert(ctxt, attrHashSize, attname, nsuri,
+ hashValue, i);
+ if (res < 0)
+ continue;
+
+ /*
+ * [ WFC: Unique Att Spec ]
+ * No attribute name may appear more than once in the same
+ * start-tag or empty-element tag.
+ * As extended by the Namespace in XML REC.
+ */
+ if (res < INT_MAX) {
+ if (aprefix == atts[res+1]) {
+ xmlErrAttributeDup(ctxt, aprefix, attname);
+ } else {
+ xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED,
+ "Namespaced Attribute %s in '%s' redefined\n",
+ attname, nsuri, NULL);
+ }
+ }
+ }
}
/*
@@ -9982,17 +9922,20 @@ next_attr:
/*
* Check whether the attribute exists
*/
- hashValue = xmlCombineHash(attr->name.hashValue, uriHashValue);
- res = xmlAttrHashInsert(ctxt, nbatts, &attrHashSize, attname,
- nsuri, hashValue);
- if (res < 0)
- continue;
- if (res < INT_MAX) {
- if (aprefix == atts[res+1])
+ if (maxAtts > 1) {
+ hashValue = xmlDictCombineHash(attr->name.hashValue,
+ uriHashValue);
+ res = xmlAttrHashInsert(ctxt, attrHashSize, attname, nsuri,
+ hashValue, nbatts);
+ if (res < 0)
continue;
- xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED,
- "Namespaced Attribute %s in '%s' redefined\n",
- attname, nsuri, NULL);
+ if (res < INT_MAX) {
+ if (aprefix == atts[res+1])
+ continue;
+ xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED,
+ "Namespaced Attribute %s in '%s' redefined\n",
+ attname, nsuri, NULL);
+ }
}
xmlParserEntityCheck(ctxt, attr->expandedSize);
@@ -10215,7 +10158,7 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) {
buf = tmp;
size *= 2;
}
- COPY_BUF(rl,buf,len,r);
+ COPY_BUF(buf, len, r);
if (len > maxLength) {
xmlFatalErrMsg(ctxt, XML_ERR_CDATA_NOT_FINISHED,
"CData section too big found\n");
@@ -12991,9 +12934,8 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
xmlNodePtr content = NULL;
xmlNodePtr last = NULL;
xmlParserErrors ret = XML_ERR_OK;
-#if 0
+ xmlHashedString hprefix, huri;
unsigned i;
-#endif
if (((oldctxt->depth > 40) && ((oldctxt->options & XML_PARSE_HUGE) == 0)) ||
(oldctxt->depth > 100)) {
@@ -13026,17 +12968,20 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
/*
* Propagate namespaces down the entity
*
- * This is disabled for now. The pre-2.12 code was already broken
- * since the SAX handler was using xmlSearchNs which didn't see the
- * namespaces added here.
- *
* Making entities and namespaces work correctly requires additional
* changes, see xmlParseReference.
*/
-#if 0
+
+ /* Default namespace */
+ hprefix.name = NULL;
+ hprefix.hashValue = 0;
+ huri.name = xmlParserNsLookupUri(oldctxt, &hprefix);
+ huri.hashValue = 0;
+ if (huri.name != NULL)
+ xmlParserNsPush(ctxt, NULL, &huri, NULL, 0);
+
for (i = 0; i < oldctxt->nsdb->hashSize; i++) {
xmlParserNsBucket *bucket = &oldctxt->nsdb->hash[i];
- xmlHashedString hprefix, huri;
const xmlChar **ns;
xmlParserNsExtra *extra;
unsigned nsIndex;
@@ -13051,10 +12996,13 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
hprefix.hashValue = bucket->hashValue;
huri.name = ns[1];
huri.hashValue = extra->uriHashValue;
- xmlParserNsPush(ctxt, &hprefix, &huri, extra->saxData, 0);
+ /*
+ * Don't copy SAX data to avoid a use-after-free with XML reader.
+ * This matches the pre-2.12 behavior.
+ */
+ xmlParserNsPush(ctxt, &hprefix, &huri, NULL, 0);
}
}
-#endif
oldsax = ctxt->sax;
ctxt->sax = oldctxt->sax;
diff --git a/parserInternals.c b/parserInternals.c
index 9667ccb4..77b5a00b 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -38,7 +38,6 @@
#define CUR(ctxt) ctxt->input->cur
#define END(ctxt) ctxt->input->end
-#define VALID_CTXT(ctxt) (CUR(ctxt) <= END(ctxt))
#include "private/buf.h"
#include "private/enc.h"
@@ -603,9 +602,7 @@ xmlParserShrink(xmlParserCtxtPtr ctxt) {
xmlParserInputBufferPtr buf = in->buf;
size_t used;
- /* Don't shrink push parser buffer. */
- if ((buf == NULL) ||
- ((ctxt->progressive) && (ctxt->inputNr <= 1)))
+ if (buf == NULL)
return;
used = in->cur - in->base;
@@ -699,154 +696,102 @@ xmlParserInputShrink(xmlParserInputPtr in) {
void
xmlNextChar(xmlParserCtxtPtr ctxt)
{
+ const unsigned char *cur;
+ size_t avail;
+ int c;
+
if ((ctxt == NULL) || (ctxt->instate == XML_PARSER_EOF) ||
(ctxt->input == NULL))
return;
- if (!(VALID_CTXT(ctxt))) {
- xmlErrInternal(ctxt, "Parser input data memory error\n", NULL);
- ctxt->errNo = XML_ERR_INTERNAL_ERROR;
- xmlStopParser(ctxt);
- return;
- }
+ avail = ctxt->input->end - ctxt->input->cur;
- if (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK) {
+ if (avail < INPUT_CHUNK) {
xmlParserGrow(ctxt);
if ((ctxt->instate == XML_PARSER_EOF) ||
(ctxt->input->cur >= ctxt->input->end))
return;
+ avail = ctxt->input->end - ctxt->input->cur;
}
- if ((ctxt->input->flags & XML_INPUT_8_BIT) == 0) {
- const unsigned char *cur;
- unsigned char c;
+ cur = ctxt->input->cur;
+ c = *cur;
- cur = ctxt->input->cur;
-
- /*
- * 2.11 End-of-Line Handling
- * the literal two-character sequence "#xD#xA" or a standalone
- * literal #xD, an XML processor must pass to the application
- * the single character #xA.
- */
- if ((*cur == '\n') || (*cur == '\r')) {
+ if (c < 0x80) {
+ if (c == '\n') {
+ ctxt->input->cur++;
ctxt->input->line++;
ctxt->input->col = 1;
- if ((*cur == '\r') && (cur[1] == '\n')) {
- ctxt->input->cur++;
- cur++;
- }
+ } else if (c == '\r') {
+ /*
+ * 2.11 End-of-Line Handling
+ * the literal two-character sequence "#xD#xA" or a standalone
+ * literal #xD, an XML processor must pass to the application
+ * the single character #xA.
+ */
+ ctxt->input->cur += ((cur[1] == '\n') ? 2 : 1);
+ ctxt->input->line++;
+ ctxt->input->col = 1;
+ return;
} else {
+ ctxt->input->cur++;
ctxt->input->col++;
}
+ } else {
+ ctxt->input->col++;
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
-
- c = *cur;
- if (c & 0x80) {
- size_t avail;
-
- if (c == 0xC0)
- goto encoding_error;
+ if ((avail < 2) || (cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
- avail = ctxt->input->end - ctxt->input->cur;
+ if (c < 0xe0) {
+ /* 2-byte code */
+ if (c < 0xc2)
+ goto encoding_error;
+ ctxt->input->cur += 2;
+ } else {
+ unsigned int val = (c << 8) | cur[1];
- if ((avail < 2) || (cur[1] & 0xc0) != 0x80)
+ if ((avail < 3) || (cur[2] & 0xc0) != 0x80)
goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
- unsigned int val;
- if ((avail < 3) || (cur[2] & 0xc0) != 0x80)
+ if (c < 0xf0) {
+ /* 3-byte code */
+ if ((val < 0xe0a0) || ((val >= 0xeda0) && (val < 0xee00)))
+ goto encoding_error;
+ ctxt->input->cur += 3;
+ } else {
+ if ((avail < 4) || ((cur[3] & 0xc0) != 0x80))
goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (((c & 0xf8) != 0xf0) ||
- (avail < 4) || ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- ctxt->input->cur += 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- } else {
- /* 3-byte code */
- ctxt->input->cur += 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- }
- if (((val > 0xd7ff) && (val < 0xe000)) ||
- ((val > 0xfffd) && (val < 0x10000)) ||
- (val >= 0x110000)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n",
- val);
- }
- } else
- /* 2-byte code */
- ctxt->input->cur += 2;
- } else
- /* 1-byte code */
- ctxt->input->cur++;
- } else {
- const unsigned char *cur;
-
- /*
- * Assume it's a fixed length encoding (1) with
- * a compatible encoding for the ASCII set, since
- * XML constructs only use < 128 chars
- */
-
- cur = ctxt->input->cur;
- if ((*cur == '\n') || (*cur == '\r')) {
- ctxt->input->line++;
- ctxt->input->col = 1;
- if ((*cur == '\r') && (cur[1] == '\n')) {
- ctxt->input->cur++;
+ /* 4-byte code */
+ if ((val < 0xf090) || (val >= 0xf490))
+ goto encoding_error;
+ ctxt->input->cur += 4;
}
- } else {
- ctxt->input->col++;
}
- ctxt->input->cur++;
}
+
return;
-encoding_error:
- /*
- * If we detect an UTF8 error that probably mean that the
- * input encoding didn't get properly advertised in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- if ((ctxt == NULL) || (ctxt->input == NULL) ||
- (ctxt->input->end - ctxt->input->cur < 4)) {
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n",
- NULL, NULL);
- } else {
- char buffer[150];
- snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n%s",
- BAD_CAST buffer, NULL);
- }
- if ((ctxt->input->flags & XML_INPUT_HAS_ENCODING) == 0) {
- ctxt->input->flags |= XML_INPUT_HAS_ENCODING;
- ctxt->input->flags |= XML_INPUT_8_BIT;
+encoding_error:
+ /* Only report the first error */
+ if ((ctxt->input->flags & XML_INPUT_ENCODING_ERROR) == 0) {
+ if ((ctxt == NULL) || (ctxt->input == NULL) ||
+ (ctxt->input->end - ctxt->input->cur < 4)) {
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n",
+ NULL, NULL);
+ } else {
+ char buffer[150];
+
+ snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
+ ctxt->input->cur[0], ctxt->input->cur[1],
+ ctxt->input->cur[2], ctxt->input->cur[3]);
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n%s",
+ BAD_CAST buffer, NULL);
+ }
+ ctxt->input->flags |= XML_INPUT_ENCODING_ERROR;
}
ctxt->input->cur++;
return;
@@ -874,149 +819,128 @@ encoding_error:
int
xmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
+ const unsigned char *cur;
+ size_t avail;
+ int c;
+
if ((ctxt == NULL) || (len == NULL) || (ctxt->input == NULL)) return(0);
if (ctxt->instate == XML_PARSER_EOF)
return(0);
- if (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK) {
+ avail = ctxt->input->end - ctxt->input->cur;
+
+ if (avail < INPUT_CHUNK) {
xmlParserGrow(ctxt);
if (ctxt->instate == XML_PARSER_EOF)
return(0);
- }
-
- if ((*ctxt->input->cur >= 0x20) && (*ctxt->input->cur <= 0x7F)) {
- *len = 1;
- return(*ctxt->input->cur);
- }
- if ((ctxt->input->flags & XML_INPUT_8_BIT) == 0) {
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
- const unsigned char *cur = ctxt->input->cur;
- unsigned char c;
- unsigned int val;
-
- c = *cur;
- if (c & 0x80) {
- size_t avail;
+ avail = ctxt->input->end - ctxt->input->cur;
+ }
+
+ cur = ctxt->input->cur;
+ c = *cur;
+
+ if (c < 0x80) {
+ /* 1-byte code */
+ if (c < 0x20) {
+ /*
+ * 2.11 End-of-Line Handling
+ * the literal two-character sequence "#xD#xA" or a standalone
+ * literal #xD, an XML processor must pass to the application
+ * the single character #xA.
+ */
+ if (c == '\r') {
+ *len = ((cur[1] == '\n') ? 2 : 1);
+ c = '\n';
+ } else if (c == 0) {
+ if (ctxt->input->cur >= ctxt->input->end) {
+ *len = 0;
+ } else {
+ *len = 1;
+ /*
+ * TODO: Null bytes should be handled by callers,
+ * but this can be tricky.
+ */
+ xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
+ "Char 0x0 out of allowed range\n", c);
+ }
+ } else {
+ *len = 1;
+ }
+ } else {
+ *len = 1;
+ }
- if (((c & 0x40) == 0) || (c == 0xC0))
- goto encoding_error;
+ return(c);
+ } else {
+ int val;
- avail = ctxt->input->end - ctxt->input->cur;
+ if (avail < 2)
+ goto incomplete_sequence;
+ if ((cur[1] & 0xc0) != 0x80)
+ goto encoding_error;
- if (avail < 2)
+ if (c < 0xe0) {
+ /* 2-byte code */
+ if (c < 0xc2)
+ goto encoding_error;
+ val = (c & 0x1f) << 6;
+ val |= cur[1] & 0x3f;
+ *len = 2;
+ } else {
+ if (avail < 3)
goto incomplete_sequence;
- if ((cur[1] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
- if (avail < 3)
+ if ((cur[2] & 0xc0) != 0x80)
+ goto encoding_error;
+
+ if (c < 0xf0) {
+ /* 3-byte code */
+ val = (c & 0xf) << 12;
+ val |= (cur[1] & 0x3f) << 6;
+ val |= cur[2] & 0x3f;
+ if ((val < 0x800) || ((val >= 0xd800) && (val < 0xe000)))
+ goto encoding_error;
+ *len = 3;
+ } else {
+ if (avail < 4)
goto incomplete_sequence;
- if ((cur[2] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (avail < 4)
- goto incomplete_sequence;
- if (((c & 0xf8) != 0xf0) ||
- ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- *len = 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- if (val < 0x10000)
- goto encoding_error;
- } else {
- /* 3-byte code */
- *len = 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- if (val < 0x800)
- goto encoding_error;
- }
- } else {
- /* 2-byte code */
- *len = 2;
- val = (cur[0] & 0x1f) << 6;
- val |= cur[1] & 0x3f;
- if (val < 0x80)
- goto encoding_error;
- }
- if (!IS_CHAR(val)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n", val);
- }
- return(val);
- } else {
- /* 1-byte code */
- *len = 1;
- if ((*ctxt->input->cur == 0) &&
- (ctxt->input->end > ctxt->input->cur)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x0 out of allowed range\n", 0);
- }
- if (*ctxt->input->cur == 0xD) {
- if (ctxt->input->cur[1] == 0xA) {
- *len = 2;
- }
- return(0xA);
- }
- return(*ctxt->input->cur);
- }
- }
- /*
- * Assume it's a fixed length encoding (1) with
- * a compatible encoding for the ASCII set, since
- * XML constructs only use < 128 chars
- */
- *len = 1;
- if (*ctxt->input->cur == 0xD) {
- if (ctxt->input->cur[1] == 0xA) {
- *len = 2;
- }
- return(0xA);
- }
- return(*ctxt->input->cur);
+ if ((cur[3] & 0xc0) != 0x80)
+ goto encoding_error;
-encoding_error:
- /*
- * If we detect an UTF8 error that probably mean that the
- * input encoding didn't get properly advertised in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- if (ctxt->input->end - ctxt->input->cur < 4) {
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n",
- NULL, NULL);
- } else {
- char buffer[150];
+ /* 4-byte code */
+ val = (c & 0x0f) << 18;
+ val |= (cur[1] & 0x3f) << 12;
+ val |= (cur[2] & 0x3f) << 6;
+ val |= cur[3] & 0x3f;
+ if ((val < 0x10000) || (val >= 0x110000))
+ goto encoding_error;
+ *len = 4;
+ }
+ }
- snprintf(&buffer[0], 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n%s",
- BAD_CAST buffer, NULL);
+ return(val);
}
- if ((ctxt->input->flags & XML_INPUT_HAS_ENCODING) == 0) {
- ctxt->input->flags |= XML_INPUT_HAS_ENCODING;
- ctxt->input->flags |= XML_INPUT_8_BIT;
+
+encoding_error:
+ /* Only report the first error */
+ if ((ctxt->input->flags & XML_INPUT_ENCODING_ERROR) == 0) {
+ if (ctxt->input->end - ctxt->input->cur < 4) {
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n",
+ NULL, NULL);
+ } else {
+ char buffer[150];
+
+ snprintf(&buffer[0], 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
+ ctxt->input->cur[0], ctxt->input->cur[1],
+ ctxt->input->cur[2], ctxt->input->cur[3]);
+ __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
+ "Input is not proper UTF-8, indicate encoding !\n%s",
+ BAD_CAST buffer, NULL);
+ }
+ ctxt->input->flags |= XML_INPUT_ENCODING_ERROR;
}
*len = 1;
- return(*ctxt->input->cur);
+ return(0xFFFD); /* U+FFFD Replacement Character */
incomplete_sequence:
/*
@@ -1273,7 +1197,6 @@ xmlSwitchInputEncoding(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
in = input->buf;
input->flags |= XML_INPUT_HAS_ENCODING;
- input->flags &= ~XML_INPUT_8_BIT;
/*
* UTF-8 requires no encoding handler.
diff --git a/python/Makefile.am b/python/Makefile.am
index 1773fd30..05d167b6 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -9,7 +9,8 @@ SUBDIRS = . tests
EXTRA_DIST = \
generator.py \
libxml.py \
- libxml2-python-api.xml
+ libxml2-python-api.xml \
+ pyproject.toml
if WITH_PYTHON
AM_CPPFLAGS = \
diff --git a/python/pyproject.toml b/python/pyproject.toml
new file mode 100755
index 00000000..fed528d4
--- /dev/null
+++ b/python/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools"]
+build-backend = "setuptools.build_meta"
diff --git a/python/setup.py.in b/python/setup.py.in
index bcc4da49..d75fe550 100755
--- a/python/setup.py.in
+++ b/python/setup.py.in
@@ -5,11 +5,15 @@
import sys, os
try:
- import setuptools
+ from setuptools import setup, Extension
except ImportError:
- pass
-
-from distutils.core import setup, Extension
+ try:
+ # Using distutils, for python < 3.12
+ from distutils.core import setup, Extension
+ except ImportError:
+ # distutils is not present in python 3.12 and greater
+ print("setuptools is required for python >= 3.12")
+ sys.exit(1)
# Below ROOT, we expect to find include, include/libxml2, lib and bin.
# On *nix, it is not needed (but should not harm),
diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am
index c2270ce5..588dcddc 100644
--- a/python/tests/Makefile.am
+++ b/python/tests/Makefile.am
@@ -1,5 +1,5 @@
exampledir = $(docdir)/python/examples
-dist_example_DATA = $(PYTESTS) $(XMLS)
+dist_example_DATA = $(PYTESTS) $(XMLS) setup_test.py
PYTESTS= \
build.py \
diff --git a/result/noent/ns-ent.xml b/result/noent/ns-ent.xml
new file mode 100644
index 00000000..2d02e3dd
--- /dev/null
+++ b/result/noent/ns-ent.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY ent1 "<elem/>">
+<!ENTITY ent2 "<ns:elem/>">
+]>
+<doc>
+ <a xmlns="urn:a"><elem/></a>
+ <b xmlns="urn:b"><elem/></b>
+ <a xmlns:ns="urn:a"><elem/></a>
+ <b xmlns:ns="urn:b"><elem/></b>
+</doc>
diff --git a/result/noent/ns-ent.xml.sax2 b/result/noent/ns-ent.xml.sax2
new file mode 100644
index 00000000..7fe00ae1
--- /dev/null
+++ b/result/noent/ns-ent.xml.sax2
@@ -0,0 +1,41 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(ent1, 1, (null), (null), <elem/>)
+SAX.getEntity(ent1)
+SAX.entityDecl(ent2, 1, (null), (null), <ns:elem/>)
+SAX.getEntity(ent2)
+SAX.externalSubset(doc, , )
+SAX.startElementNs(doc, NULL, NULL, 0, 0, 0)
+SAX.characters(
+ , 5)
+SAX.startElementNs(a, NULL, 'urn:a', 1, xmlns='urn:a', 0, 0)
+SAX.getEntity(ent1)
+SAX.startElementNs(elem, NULL, 'urn:a', 0, 0, 0)
+SAX.endElementNs(elem, NULL, 'urn:a')
+SAX.endElementNs(a, NULL, 'urn:a')
+SAX.characters(
+ , 5)
+SAX.startElementNs(b, NULL, 'urn:b', 1, xmlns='urn:b', 0, 0)
+SAX.getEntity(ent1)
+SAX.startElementNs(elem, NULL, 'urn:b', 0, 0, 0)
+SAX.endElementNs(elem, NULL, 'urn:b')
+SAX.endElementNs(b, NULL, 'urn:b')
+SAX.characters(
+ , 5)
+SAX.startElementNs(a, NULL, NULL, 1, xmlns:ns='urn:a', 0, 0)
+SAX.getEntity(ent2)
+SAX.startElementNs(elem, ns, 'urn:a', 0, 0, 0)
+SAX.endElementNs(elem, ns, 'urn:a')
+SAX.endElementNs(a, NULL, NULL)
+SAX.characters(
+ , 5)
+SAX.startElementNs(b, NULL, NULL, 1, xmlns:ns='urn:b', 0, 0)
+SAX.getEntity(ent2)
+SAX.startElementNs(elem, ns, 'urn:b', 0, 0, 0)
+SAX.endElementNs(elem, ns, 'urn:b')
+SAX.endElementNs(b, NULL, NULL)
+SAX.characters(
+, 1)
+SAX.endElementNs(doc, NULL, NULL)
+SAX.endDocument()
diff --git a/result/ns-ent.xml b/result/ns-ent.xml
new file mode 100644
index 00000000..94f89b17
--- /dev/null
+++ b/result/ns-ent.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc [
+<!ENTITY ent1 "<elem/>">
+<!ENTITY ent2 "<ns:elem/>">
+]>
+<doc>
+ <a xmlns="urn:a">&ent1;</a>
+ <b xmlns="urn:b">&ent1;</b>
+ <a xmlns:ns="urn:a">&ent2;</a>
+ <b xmlns:ns="urn:b">&ent2;</b>
+</doc>
diff --git a/result/ns-ent.xml.rde b/result/ns-ent.xml.rde
new file mode 100644
index 00000000..0b79eaa8
--- /dev/null
+++ b/result/ns-ent.xml.rde
@@ -0,0 +1,25 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 1 a 0 0
+2 1 elem 1 0
+1 15 a 0 0
+1 14 #text 0 1
+
+1 1 b 0 0
+2 1 elem 1 0
+1 15 b 0 0
+1 14 #text 0 1
+
+1 1 a 0 0
+2 1 elem 1 0
+1 15 a 0 0
+1 14 #text 0 1
+
+1 1 b 0 0
+2 1 elem 1 0
+1 15 b 0 0
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/ns-ent.xml.rdr b/result/ns-ent.xml.rdr
new file mode 100644
index 00000000..88bcf472
--- /dev/null
+++ b/result/ns-ent.xml.rdr
@@ -0,0 +1,25 @@
+0 10 doc 0 0
+0 1 doc 0 0
+1 14 #text 0 1
+
+1 1 a 0 0
+2 5 ent1 0 0
+1 15 a 0 0
+1 14 #text 0 1
+
+1 1 b 0 0
+2 5 ent1 0 0
+1 15 b 0 0
+1 14 #text 0 1
+
+1 1 a 0 0
+2 5 ent2 0 0
+1 15 a 0 0
+1 14 #text 0 1
+
+1 1 b 0 0
+2 5 ent2 0 0
+1 15 b 0 0
+1 14 #text 0 1
+
+0 15 doc 0 0
diff --git a/result/ns-ent.xml.sax b/result/ns-ent.xml.sax
new file mode 100644
index 00000000..98b63fcd
--- /dev/null
+++ b/result/ns-ent.xml.sax
@@ -0,0 +1,45 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(ent1, 1, (null), (null), <elem/>)
+SAX.getEntity(ent1)
+SAX.entityDecl(ent2, 1, (null), (null), <ns:elem/>)
+SAX.getEntity(ent2)
+SAX.externalSubset(doc, , )
+SAX.startElement(doc)
+SAX.characters(
+ , 5)
+SAX.startElement(a, xmlns='urn:a')
+SAX.getEntity(ent1)
+SAX.startElement(elem)
+SAX.endElement(elem)
+SAX.reference(ent1)
+SAX.endElement(a)
+SAX.characters(
+ , 5)
+SAX.startElement(b, xmlns='urn:b')
+SAX.getEntity(ent1)
+SAX.startElement(elem)
+SAX.endElement(elem)
+SAX.reference(ent1)
+SAX.endElement(b)
+SAX.characters(
+ , 5)
+SAX.startElement(a, xmlns:ns='urn:a')
+SAX.getEntity(ent2)
+SAX.startElement(ns:elem)
+SAX.endElement(ns:elem)
+SAX.reference(ent2)
+SAX.endElement(a)
+SAX.characters(
+ , 5)
+SAX.startElement(b, xmlns:ns='urn:b')
+SAX.getEntity(ent2)
+SAX.startElement(ns:elem)
+SAX.endElement(ns:elem)
+SAX.reference(ent2)
+SAX.endElement(b)
+SAX.characters(
+, 1)
+SAX.endElement(doc)
+SAX.endDocument()
diff --git a/result/ns-ent.xml.sax2 b/result/ns-ent.xml.sax2
new file mode 100644
index 00000000..25106c41
--- /dev/null
+++ b/result/ns-ent.xml.sax2
@@ -0,0 +1,45 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.internalSubset(doc, , )
+SAX.entityDecl(ent1, 1, (null), (null), <elem/>)
+SAX.getEntity(ent1)
+SAX.entityDecl(ent2, 1, (null), (null), <ns:elem/>)
+SAX.getEntity(ent2)
+SAX.externalSubset(doc, , )
+SAX.startElementNs(doc, NULL, NULL, 0, 0, 0)
+SAX.characters(
+ , 5)
+SAX.startElementNs(a, NULL, 'urn:a', 1, xmlns='urn:a', 0, 0)
+SAX.getEntity(ent1)
+SAX.startElementNs(elem, NULL, 'urn:a', 0, 0, 0)
+SAX.endElementNs(elem, NULL, 'urn:a')
+SAX.reference(ent1)
+SAX.endElementNs(a, NULL, 'urn:a')
+SAX.characters(
+ , 5)
+SAX.startElementNs(b, NULL, 'urn:b', 1, xmlns='urn:b', 0, 0)
+SAX.getEntity(ent1)
+SAX.startElementNs(elem, NULL, 'urn:b', 0, 0, 0)
+SAX.endElementNs(elem, NULL, 'urn:b')
+SAX.reference(ent1)
+SAX.endElementNs(b, NULL, 'urn:b')
+SAX.characters(
+ , 5)
+SAX.startElementNs(a, NULL, NULL, 1, xmlns:ns='urn:a', 0, 0)
+SAX.getEntity(ent2)
+SAX.startElementNs(elem, ns, 'urn:a', 0, 0, 0)
+SAX.endElementNs(elem, ns, 'urn:a')
+SAX.reference(ent2)
+SAX.endElementNs(a, NULL, NULL)
+SAX.characters(
+ , 5)
+SAX.startElementNs(b, NULL, NULL, 1, xmlns:ns='urn:b', 0, 0)
+SAX.getEntity(ent2)
+SAX.startElementNs(elem, ns, 'urn:b', 0, 0, 0)
+SAX.endElementNs(elem, ns, 'urn:b')
+SAX.reference(ent2)
+SAX.endElementNs(b, NULL, NULL)
+SAX.characters(
+, 1)
+SAX.endElementNs(doc, NULL, NULL)
+SAX.endDocument()
diff --git a/runtest.c b/runtest.c
index 37fb2a9e..fe896b72 100644
--- a/runtest.c
+++ b/runtest.c
@@ -359,7 +359,7 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
}
static void
-testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, xmlErrorPtr err) {
+testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, const xmlError *err) {
char *file = NULL;
int line = 0;
int code = -1;
@@ -4431,6 +4431,10 @@ thread_specific_data(void *private_data)
const char *filename = params->filename;
int okay = 1;
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+ xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
+#endif
+
myDoc = xmlReadFile(filename, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD);
if (myDoc) {
xmlFreeDoc(myDoc);
diff --git a/runxmlconf.c b/runxmlconf.c
index b871b694..3053f6a3 100644
--- a/runxmlconf.c
+++ b/runxmlconf.c
@@ -121,7 +121,7 @@ static void test_log(const char *msg, ...) {
}
static void
-testErrorHandler(void *userData ATTRIBUTE_UNUSED, xmlErrorPtr error) {
+testErrorHandler(void *userData ATTRIBUTE_UNUSED, const xmlError *error) {
int res;
if (testErrorsSize >= 32768)
diff --git a/test/ns-ent.xml b/test/ns-ent.xml
new file mode 100644
index 00000000..f81fdfc4
--- /dev/null
+++ b/test/ns-ent.xml
@@ -0,0 +1,10 @@
+<!DOCTYPE doc [
+ <!ENTITY ent1 "<elem/>">
+ <!ENTITY ent2 "<ns:elem/>">
+]>
+<doc>
+ <a xmlns="urn:a">&ent1;</a>
+ <b xmlns="urn:b">&ent1;</b>
+ <a xmlns:ns="urn:a">&ent2;</a>
+ <b xmlns:ns="urn:b">&ent2;</b>
+</doc>
diff --git a/testapi.c b/testapi.c
index 7337b34e..2f17c935 100644
--- a/testapi.c
+++ b/testapi.c
@@ -39,7 +39,7 @@ static xmlNsPtr api_ns = NULL;
static void
structured_errors(void *userData ATTRIBUTE_UNUSED,
- xmlErrorPtr error ATTRIBUTE_UNUSED) {
+ const xmlError *error ATTRIBUTE_UNUSED) {
generic_errors++;
}
@@ -8333,11 +8333,11 @@ test_xmlDictLookup(void) {
int mem_base;
const xmlChar * ret_val;
- xmlDictPtr dict; /* the dictionary */
+ xmlDictPtr dict; /* dictionary */
int n_dict;
- xmlChar * name; /* the name of the userdata */
+ xmlChar * name; /* string key */
int n_name;
- int len; /* the length of the name, if -1 it is recomputed */
+ int len; /* length of the key, if -1 it is recomputed */
int n_len;
for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
@@ -9750,7 +9750,7 @@ static int
test_entities(void) {
int test_ret = 0;
- if (quiet == 0) printf("Testing entities : 11 of 17 functions ...\n");
+ if (quiet == 0) printf("Testing entities : 11 of 18 functions ...\n");
test_ret += test_xmlAddDocEntity();
test_ret += test_xmlAddDtdEntity();
test_ret += test_xmlCopyEntitiesTable();
@@ -9776,35 +9776,35 @@ test_xmlHashAddEntry(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* string key */
+ int n_key;
+ void * payload; /* pointer to the payload */
+ int n_payload;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_payload = 0;n_payload < gen_nb_void_ptr;n_payload++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- userdata = gen_userdata(n_userdata, 2);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ payload = gen_void_ptr(n_payload, 2);
- ret_val = xmlHashAddEntry(table, (const xmlChar *)name, userdata);
+ ret_val = xmlHashAddEntry(hash, (const xmlChar *)key, payload);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_userdata(n_userdata, userdata, 2);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_void_ptr(n_payload, payload, 2);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashAddEntry",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_userdata);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_payload);
printf("\n");
}
}
@@ -9822,41 +9822,41 @@ test_xmlHashAddEntry2(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ void * payload; /* pointer to the payload */
+ int n_payload;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_payload = 0;n_payload < gen_nb_void_ptr;n_payload++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- userdata = gen_userdata(n_userdata, 3);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ payload = gen_void_ptr(n_payload, 3);
- ret_val = xmlHashAddEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, userdata);
+ ret_val = xmlHashAddEntry2(hash, (const xmlChar *)key, (const xmlChar *)key2, payload);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_userdata(n_userdata, userdata, 3);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_void_ptr(n_payload, payload, 3);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashAddEntry2",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_userdata);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_payload);
printf("\n");
}
}
@@ -9875,47 +9875,47 @@ test_xmlHashAddEntry3(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ xmlChar * key3; /* third string key */
+ int n_key3;
+ void * payload; /* pointer to the payload */
+ int n_payload;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_key3 = 0;n_key3 < gen_nb_const_xmlChar_ptr;n_key3++) {
+ for (n_payload = 0;n_payload < gen_nb_void_ptr;n_payload++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
- userdata = gen_userdata(n_userdata, 4);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ key3 = gen_const_xmlChar_ptr(n_key3, 3);
+ payload = gen_void_ptr(n_payload, 4);
- ret_val = xmlHashAddEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, userdata);
+ ret_val = xmlHashAddEntry3(hash, (const xmlChar *)key, (const xmlChar *)key2, (const xmlChar *)key3, payload);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- des_userdata(n_userdata, userdata, 4);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_const_xmlChar_ptr(n_key3, (const xmlChar *)key3, 3);
+ des_void_ptr(n_payload, payload, 4);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashAddEntry3",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf(" %d", n_userdata);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_key3);
+ printf(" %d", n_payload);
printf("\n");
}
}
@@ -9964,28 +9964,28 @@ test_xmlHashDefaultDeallocator(void) {
int test_ret = 0;
int mem_base;
- void * entry; /* the hash table entry */
+ void * entry; /* hash table entry */
int n_entry;
- xmlChar * name; /* the entry's name */
- int n_name;
+ xmlChar * key; /* the entry's string key */
+ int n_key;
for (n_entry = 0;n_entry < gen_nb_void_ptr;n_entry++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
mem_base = xmlMemBlocks();
entry = gen_void_ptr(n_entry, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
+ key = gen_const_xmlChar_ptr(n_key, 1);
- xmlHashDefaultDeallocator(entry, (const xmlChar *)name);
+ xmlHashDefaultDeallocator(entry, (const xmlChar *)key);
call_tests++;
des_void_ptr(n_entry, entry, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashDefaultDeallocator",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_entry);
- printf(" %d", n_name);
+ printf(" %d", n_key);
printf("\n");
}
}
@@ -10002,29 +10002,29 @@ test_xmlHashLookup(void) {
int mem_base;
void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* string key */
+ int n_key;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
- ret_val = xmlHashLookup(table, (const xmlChar *)name);
+ ret_val = xmlHashLookup(hash, (const xmlChar *)key);
desret_void_ptr(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashLookup",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
printf("\n");
}
}
@@ -10041,35 +10041,35 @@ test_xmlHashLookup2(void) {
int mem_base;
void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
-
- ret_val = xmlHashLookup2(table, (const xmlChar *)name, (const xmlChar *)name2);
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ mem_base = xmlMemBlocks();
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+
+ ret_val = xmlHashLookup2(hash, (const xmlChar *)key, (const xmlChar *)key2);
desret_void_ptr(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashLookup2",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
printf("\n");
}
}
@@ -10087,41 +10087,41 @@ test_xmlHashLookup3(void) {
int mem_base;
void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
-
- ret_val = xmlHashLookup3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3);
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ xmlChar * key3; /* third string key */
+ int n_key3;
+
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_key3 = 0;n_key3 < gen_nb_const_xmlChar_ptr;n_key3++) {
+ mem_base = xmlMemBlocks();
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ key3 = gen_const_xmlChar_ptr(n_key3, 3);
+
+ ret_val = xmlHashLookup3(hash, (const xmlChar *)key, (const xmlChar *)key2, (const xmlChar *)key3);
desret_void_ptr(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_const_xmlChar_ptr(n_key3, (const xmlChar *)key3, 3);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashLookup3",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_key3);
printf("\n");
}
}
@@ -10140,25 +10140,25 @@ test_xmlHashQLookup(void) {
int mem_base;
void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * prefix; /* the prefix of the userdata */
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * prefix; /* prefix of the string key */
int n_prefix;
- xmlChar * name; /* the name of the userdata */
+ xmlChar * name; /* local name of the string key */
int n_name;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
prefix = gen_const_xmlChar_ptr(n_prefix, 1);
name = gen_const_xmlChar_ptr(n_name, 2);
- ret_val = xmlHashQLookup(table, (const xmlChar *)prefix, (const xmlChar *)name);
+ ret_val = xmlHashQLookup(hash, (const xmlChar *)prefix, (const xmlChar *)name);
desret_void_ptr(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
+ des_xmlHashTablePtr(n_hash, hash, 0);
des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
xmlResetLastError();
@@ -10166,7 +10166,7 @@ test_xmlHashQLookup(void) {
printf("Leak of %d blocks found in xmlHashQLookup",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
+ printf(" %d", n_hash);
printf(" %d", n_prefix);
printf(" %d", n_name);
printf("\n");
@@ -10186,33 +10186,33 @@ test_xmlHashQLookup2(void) {
int mem_base;
void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * prefix; /* the prefix of the userdata */
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * prefix; /* first prefix */
int n_prefix;
- xmlChar * name; /* the name of the userdata */
+ xmlChar * name; /* first local name */
int n_name;
- xmlChar * prefix2; /* the second prefix of the userdata */
+ xmlChar * prefix2; /* second prefix */
int n_prefix2;
- xmlChar * name2; /* a second name of the userdata */
+ xmlChar * name2; /* second local name */
int n_name2;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
for (n_prefix2 = 0;n_prefix2 < gen_nb_const_xmlChar_ptr;n_prefix2++) {
for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
prefix = gen_const_xmlChar_ptr(n_prefix, 1);
name = gen_const_xmlChar_ptr(n_name, 2);
prefix2 = gen_const_xmlChar_ptr(n_prefix2, 3);
name2 = gen_const_xmlChar_ptr(n_name2, 4);
- ret_val = xmlHashQLookup2(table, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2);
+ ret_val = xmlHashQLookup2(hash, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2);
desret_void_ptr(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
+ des_xmlHashTablePtr(n_hash, hash, 0);
des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
des_const_xmlChar_ptr(n_prefix2, (const xmlChar *)prefix2, 3);
@@ -10222,7 +10222,7 @@ test_xmlHashQLookup2(void) {
printf("Leak of %d blocks found in xmlHashQLookup2",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
+ printf(" %d", n_hash);
printf(" %d", n_prefix);
printf(" %d", n_name);
printf(" %d", n_prefix2);
@@ -10246,22 +10246,22 @@ test_xmlHashQLookup3(void) {
int mem_base;
void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * prefix; /* the prefix of the userdata */
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * prefix; /* first prefix */
int n_prefix;
- xmlChar * name; /* the name of the userdata */
+ xmlChar * name; /* first local name */
int n_name;
- xmlChar * prefix2; /* the second prefix of the userdata */
+ xmlChar * prefix2; /* second prefix */
int n_prefix2;
- xmlChar * name2; /* a second name of the userdata */
+ xmlChar * name2; /* second local name */
int n_name2;
- xmlChar * prefix3; /* the third prefix of the userdata */
+ xmlChar * prefix3; /* third prefix */
int n_prefix3;
- xmlChar * name3; /* a third name of the userdata */
+ xmlChar * name3; /* third local name */
int n_name3;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
for (n_prefix2 = 0;n_prefix2 < gen_nb_const_xmlChar_ptr;n_prefix2++) {
@@ -10269,7 +10269,7 @@ test_xmlHashQLookup3(void) {
for (n_prefix3 = 0;n_prefix3 < gen_nb_const_xmlChar_ptr;n_prefix3++) {
for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
prefix = gen_const_xmlChar_ptr(n_prefix, 1);
name = gen_const_xmlChar_ptr(n_name, 2);
prefix2 = gen_const_xmlChar_ptr(n_prefix2, 3);
@@ -10277,10 +10277,10 @@ test_xmlHashQLookup3(void) {
prefix3 = gen_const_xmlChar_ptr(n_prefix3, 5);
name3 = gen_const_xmlChar_ptr(n_name3, 6);
- ret_val = xmlHashQLookup3(table, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2, (const xmlChar *)prefix3, (const xmlChar *)name3);
+ ret_val = xmlHashQLookup3(hash, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2, (const xmlChar *)prefix3, (const xmlChar *)name3);
desret_void_ptr(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
+ des_xmlHashTablePtr(n_hash, hash, 0);
des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
des_const_xmlChar_ptr(n_prefix2, (const xmlChar *)prefix2, 3);
@@ -10292,7 +10292,7 @@ test_xmlHashQLookup3(void) {
printf("Leak of %d blocks found in xmlHashQLookup3",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
+ printf(" %d", n_hash);
printf(" %d", n_prefix);
printf(" %d", n_name);
printf(" %d", n_prefix2);
@@ -10320,35 +10320,35 @@ test_xmlHashRemoveEntry(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlHashDeallocator f; /* the deallocator function for removed item (if any) */
- int n_f;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* string key */
+ int n_key;
+ xmlHashDeallocator dealloc; /* deallocator function for removed item or NULL */
+ int n_dealloc;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_dealloc = 0;n_dealloc < gen_nb_xmlHashDeallocator;n_dealloc++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- f = gen_xmlHashDeallocator(n_f, 2);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ dealloc = gen_xmlHashDeallocator(n_dealloc, 2);
- ret_val = xmlHashRemoveEntry(table, (const xmlChar *)name, f);
+ ret_val = xmlHashRemoveEntry(hash, (const xmlChar *)key, dealloc);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_xmlHashDeallocator(n_f, f, 2);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_xmlHashDeallocator(n_dealloc, dealloc, 2);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashRemoveEntry",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_f);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_dealloc);
printf("\n");
}
}
@@ -10366,41 +10366,41 @@ test_xmlHashRemoveEntry2(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlHashDeallocator f; /* the deallocator function for removed item (if any) */
- int n_f;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ xmlHashDeallocator dealloc; /* deallocator function for removed item or NULL */
+ int n_dealloc;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_dealloc = 0;n_dealloc < gen_nb_xmlHashDeallocator;n_dealloc++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- f = gen_xmlHashDeallocator(n_f, 3);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ dealloc = gen_xmlHashDeallocator(n_dealloc, 3);
- ret_val = xmlHashRemoveEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, f);
+ ret_val = xmlHashRemoveEntry2(hash, (const xmlChar *)key, (const xmlChar *)key2, dealloc);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_xmlHashDeallocator(n_f, f, 3);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_xmlHashDeallocator(n_dealloc, dealloc, 3);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashRemoveEntry2",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_f);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_dealloc);
printf("\n");
}
}
@@ -10419,47 +10419,47 @@ test_xmlHashRemoveEntry3(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
- xmlHashDeallocator f; /* the deallocator function for removed item (if any) */
- int n_f;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ xmlChar * key3; /* third string key */
+ int n_key3;
+ xmlHashDeallocator dealloc; /* deallocator function for removed item or NULL */
+ int n_dealloc;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_key3 = 0;n_key3 < gen_nb_const_xmlChar_ptr;n_key3++) {
+ for (n_dealloc = 0;n_dealloc < gen_nb_xmlHashDeallocator;n_dealloc++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
- f = gen_xmlHashDeallocator(n_f, 4);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ key3 = gen_const_xmlChar_ptr(n_key3, 3);
+ dealloc = gen_xmlHashDeallocator(n_dealloc, 4);
- ret_val = xmlHashRemoveEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, f);
+ ret_val = xmlHashRemoveEntry3(hash, (const xmlChar *)key, (const xmlChar *)key2, (const xmlChar *)key3, dealloc);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- des_xmlHashDeallocator(n_f, f, 4);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_const_xmlChar_ptr(n_key3, (const xmlChar *)key3, 3);
+ des_xmlHashDeallocator(n_dealloc, dealloc, 4);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashRemoveEntry3",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf(" %d", n_f);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_key3);
+ printf(" %d", n_dealloc);
printf("\n");
}
}
@@ -10519,23 +10519,23 @@ test_xmlHashSize(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
- ret_val = xmlHashSize(table);
+ ret_val = xmlHashSize(hash);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
+ des_xmlHashTablePtr(n_hash, hash, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashSize",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
+ printf(" %d", n_hash);
printf("\n");
}
}
@@ -10551,41 +10551,41 @@ test_xmlHashUpdateEntry(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
- xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */
- int n_f;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* string key */
+ int n_key;
+ void * payload; /* pointer to the payload */
+ int n_payload;
+ xmlHashDeallocator dealloc; /* deallocator function for replaced item or NULL */
+ int n_dealloc;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_payload = 0;n_payload < gen_nb_void_ptr;n_payload++) {
+ for (n_dealloc = 0;n_dealloc < gen_nb_xmlHashDeallocator;n_dealloc++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- userdata = gen_userdata(n_userdata, 2);
- f = gen_xmlHashDeallocator(n_f, 3);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ payload = gen_void_ptr(n_payload, 2);
+ dealloc = gen_xmlHashDeallocator(n_dealloc, 3);
- ret_val = xmlHashUpdateEntry(table, (const xmlChar *)name, userdata, f);
+ ret_val = xmlHashUpdateEntry(hash, (const xmlChar *)key, payload, dealloc);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_userdata(n_userdata, userdata, 2);
- des_xmlHashDeallocator(n_f, f, 3);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_void_ptr(n_payload, payload, 2);
+ des_xmlHashDeallocator(n_dealloc, dealloc, 3);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashUpdateEntry",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_userdata);
- printf(" %d", n_f);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_payload);
+ printf(" %d", n_dealloc);
printf("\n");
}
}
@@ -10604,47 +10604,47 @@ test_xmlHashUpdateEntry2(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
- xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */
- int n_f;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ void * payload; /* pointer to the payload */
+ int n_payload;
+ xmlHashDeallocator dealloc; /* deallocator function for replaced item or NULL */
+ int n_dealloc;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_payload = 0;n_payload < gen_nb_void_ptr;n_payload++) {
+ for (n_dealloc = 0;n_dealloc < gen_nb_xmlHashDeallocator;n_dealloc++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- userdata = gen_userdata(n_userdata, 3);
- f = gen_xmlHashDeallocator(n_f, 4);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ payload = gen_void_ptr(n_payload, 3);
+ dealloc = gen_xmlHashDeallocator(n_dealloc, 4);
- ret_val = xmlHashUpdateEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, userdata, f);
+ ret_val = xmlHashUpdateEntry2(hash, (const xmlChar *)key, (const xmlChar *)key2, payload, dealloc);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_userdata(n_userdata, userdata, 3);
- des_xmlHashDeallocator(n_f, f, 4);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_void_ptr(n_payload, payload, 3);
+ des_xmlHashDeallocator(n_dealloc, dealloc, 4);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashUpdateEntry2",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_userdata);
- printf(" %d", n_f);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_payload);
+ printf(" %d", n_dealloc);
printf("\n");
}
}
@@ -10664,53 +10664,53 @@ test_xmlHashUpdateEntry3(void) {
int mem_base;
int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
- xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */
- int n_f;
+ xmlHashTablePtr hash; /* hash table */
+ int n_hash;
+ xmlChar * key; /* first string key */
+ int n_key;
+ xmlChar * key2; /* second string key */
+ int n_key2;
+ xmlChar * key3; /* third string key */
+ int n_key3;
+ void * payload; /* pointer to the payload */
+ int n_payload;
+ xmlHashDeallocator dealloc; /* deallocator function for replaced item or NULL */
+ int n_dealloc;
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
+ for (n_hash = 0;n_hash < gen_nb_xmlHashTablePtr;n_hash++) {
+ for (n_key = 0;n_key < gen_nb_const_xmlChar_ptr;n_key++) {
+ for (n_key2 = 0;n_key2 < gen_nb_const_xmlChar_ptr;n_key2++) {
+ for (n_key3 = 0;n_key3 < gen_nb_const_xmlChar_ptr;n_key3++) {
+ for (n_payload = 0;n_payload < gen_nb_void_ptr;n_payload++) {
+ for (n_dealloc = 0;n_dealloc < gen_nb_xmlHashDeallocator;n_dealloc++) {
mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
- userdata = gen_userdata(n_userdata, 4);
- f = gen_xmlHashDeallocator(n_f, 5);
+ hash = gen_xmlHashTablePtr(n_hash, 0);
+ key = gen_const_xmlChar_ptr(n_key, 1);
+ key2 = gen_const_xmlChar_ptr(n_key2, 2);
+ key3 = gen_const_xmlChar_ptr(n_key3, 3);
+ payload = gen_void_ptr(n_payload, 4);
+ dealloc = gen_xmlHashDeallocator(n_dealloc, 5);
- ret_val = xmlHashUpdateEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, userdata, f);
+ ret_val = xmlHashUpdateEntry3(hash, (const xmlChar *)key, (const xmlChar *)key2, (const xmlChar *)key3, payload, dealloc);
desret_int(ret_val);
call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- des_userdata(n_userdata, userdata, 4);
- des_xmlHashDeallocator(n_f, f, 5);
+ des_xmlHashTablePtr(n_hash, hash, 0);
+ des_const_xmlChar_ptr(n_key, (const xmlChar *)key, 1);
+ des_const_xmlChar_ptr(n_key2, (const xmlChar *)key2, 2);
+ des_const_xmlChar_ptr(n_key3, (const xmlChar *)key3, 3);
+ des_void_ptr(n_payload, payload, 4);
+ des_xmlHashDeallocator(n_dealloc, dealloc, 5);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlHashUpdateEntry3",
xmlMemBlocks() - mem_base);
test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf(" %d", n_userdata);
- printf(" %d", n_f);
+ printf(" %d", n_hash);
+ printf(" %d", n_key);
+ printf(" %d", n_key2);
+ printf(" %d", n_key3);
+ printf(" %d", n_payload);
+ printf(" %d", n_dealloc);
printf("\n");
}
}
@@ -29269,6 +29269,10 @@ test_initGenericErrorDefaultFunc(void) {
}
+#define gen_nb_const_xmlError_ptr 1
+#define gen_const_xmlError_ptr(no, nr) NULL
+#define des_const_xmlError_ptr(no, val, nr)
+
#define gen_nb_xmlErrorPtr 1
#define gen_xmlErrorPtr(no, nr) NULL
#define des_xmlErrorPtr(no, val, nr)
@@ -29279,21 +29283,21 @@ test_xmlCopyError(void) {
int mem_base;
int ret_val;
- xmlErrorPtr from; /* a source error */
+ xmlError * from; /* a source error */
int n_from;
xmlErrorPtr to; /* a target error */
int n_to;
- for (n_from = 0;n_from < gen_nb_xmlErrorPtr;n_from++) {
+ for (n_from = 0;n_from < gen_nb_const_xmlError_ptr;n_from++) {
for (n_to = 0;n_to < gen_nb_xmlErrorPtr;n_to++) {
mem_base = xmlMemBlocks();
- from = gen_xmlErrorPtr(n_from, 0);
+ from = gen_const_xmlError_ptr(n_from, 0);
to = gen_xmlErrorPtr(n_to, 1);
- ret_val = xmlCopyError(from, to);
+ ret_val = xmlCopyError((const xmlError *)from, to);
desret_int(ret_val);
call_tests++;
- des_xmlErrorPtr(n_from, from, 0);
+ des_const_xmlError_ptr(n_from, (const xmlError *)from, 0);
des_xmlErrorPtr(n_to, to, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
diff --git a/testchar.c b/testchar.c
index 0dc7ccdc..8895d8d0 100644
--- a/testchar.c
+++ b/testchar.c
@@ -15,7 +15,7 @@
int lastError;
-static void errorHandler(void *unused, xmlErrorPtr err) {
+static void errorHandler(void *unused, const xmlError *err) {
if ((unused == NULL) && (err != NULL) && (lastError == 0)) {
lastError = err->code;
}
@@ -261,6 +261,40 @@ static int testDocumentRanges(void) {
return(test_ret);
}
+static int
+testCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
+ const xmlChar *oldcur;
+ int c, err, len2;
+
+ lastError = 0;
+ c = xmlCurrentChar(ctxt, len);
+ ctxt->input->flags = 0;
+ err = lastError;
+
+ oldcur = ctxt->input->cur;
+ lastError = 0;
+ xmlNextChar(ctxt);
+ ctxt->input->flags = 0;
+ len2 = ctxt->input->cur - oldcur;
+ ctxt->input->cur = oldcur;
+
+ if ((*ctxt->input->cur != 0) && (err != lastError)) {
+ fprintf(stderr, "xmlCurrentChar and xmlNextChar report different "
+ "errors: %d %d\n", err, lastError);
+ return(-1);
+ }
+
+ if ((err == 0) && (*len != len2)) {
+ fprintf(stderr, "xmlCurrentChar and xmlNextChar report different "
+ "lengths: %d %d\n", *len, len2);
+ return(-1);
+ }
+
+ lastError = err;
+
+ return(c);
+}
+
static int testCharRangeByte1(xmlParserCtxtPtr ctxt) {
int i = 0;
int len, c;
@@ -273,9 +307,9 @@ static int testCharRangeByte1(xmlParserCtxtPtr ctxt) {
data[0] = (char) i;
ctxt->nbErrors = 0;
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
- ctxt->input->flags = 0;
+ c = testCurrentChar(ctxt, &len);
+ if (c < 0)
+ continue;
if ((i == 0) || (i >= 0x80)) {
/* we must see an error there */
if (lastError != XML_ERR_INVALID_CHAR) {
@@ -309,9 +343,9 @@ static int testCharRangeByte2(xmlParserCtxtPtr ctxt) {
data[1] = (char) j;
ctxt->nbErrors = 0;
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
- ctxt->input->flags = 0;
+ c = testCurrentChar(ctxt, &len);
+ if (c < 0)
+ continue;
/* if first bit of first char is set, then second bit must too */
if ((i & 0x80) && ((i & 0x40) == 0)) {
@@ -403,9 +437,9 @@ static int testCharRangeByte3(xmlParserCtxtPtr ctxt) {
value = (K & 0x3F) + ((j & 0x3F) << 6) + ((i & 0xF) << 12);
ctxt->nbErrors = 0;
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
- ctxt->input->flags = 0;
+ c = testCurrentChar(ctxt, &len);
+ if (c < 0)
+ continue;
/*
* if fourth bit of first char is set, then the sequence would need
@@ -447,10 +481,9 @@ static int testCharRangeByte3(xmlParserCtxtPtr ctxt) {
}
/*
- * There are values in that range that are not allowed in XML-1.0
+ * There are values that are not allowed in UTF-8
*/
- else if (((value > 0xD7FF) && (value <0xE000)) ||
- ((value > 0xFFFD) && (value <0x10000))) {
+ else if ((value > 0xD7FF) && (value <0xE000)) {
if (lastError != XML_ERR_INVALID_CHAR) {
fprintf(stderr,
"Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X\n",
@@ -506,9 +539,9 @@ static int testCharRangeByte4(xmlParserCtxtPtr ctxt) {
((i & 0x7) << 18);
ctxt->nbErrors = 0;
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
- ctxt->input->flags = 0;
+ c = testCurrentChar(ctxt, &len);
+ if (c < 0)
+ continue;
/*
* if fifth bit of first char is set, then the sequence would need
@@ -551,10 +584,9 @@ static int testCharRangeByte4(xmlParserCtxtPtr ctxt) {
}
/*
- * There are values in that range that are not allowed in XML-1.0
+ * There are values in that are not allowed in UTF-8
*/
- else if (((value > 0xD7FF) && (value <0xE000)) ||
- ((value > 0xFFFD) && (value <0x10000)) ||
+ else if (((value > 0xD7FF) && (value < 0xE000)) ||
(value > 0x10FFFF)) {
if (lastError != XML_ERR_INVALID_CHAR) {
fprintf(stderr,
diff --git a/testdict.c b/testdict.c
index 90664242..ffbbc947 100644
--- a/testdict.c
+++ b/testdict.c
@@ -6,6 +6,14 @@
/**** dictionary tests ****/
+#ifdef __clang__
+ #define ATTRIBUTE_NO_SANITIZE_INTEGER \
+ __attribute__ ((no_sanitize("unsigned-integer-overflow"))) \
+ __attribute__ ((no_sanitize("unsigned-shift-base")))
+#else
+ #define ATTRIBUTE_NO_SANITIZE_INTEGER
+#endif
+
/* #define WITH_PRINT */
static const char *seeds1[] = {
@@ -443,10 +451,7 @@ rng_state[2] = { 123, 456 };
#define HASH_ROL(x,n) ((x) << (n) | ((x) & 0xFFFFFFFF) >> (32 - (n)))
-#ifdef __clang__
-__attribute__ ((no_sanitize("unsigned-integer-overflow")))
-__attribute__ ((no_sanitize("unsigned-shift-base")))
-#endif
+ATTRIBUTE_NO_SANITIZE_INTEGER
static unsigned
my_rand(unsigned max) {
unsigned s0 = rng_state[0];
diff --git a/testlimits.c b/testlimits.c
index de0da9d4..78d62fb0 100644
--- a/testlimits.c
+++ b/testlimits.c
@@ -475,7 +475,7 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
}
static void
-testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, xmlErrorPtr err) {
+testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, const xmlError *err) {
char *file = NULL;
int line = 0;
int code = -1;
diff --git a/testparser.c b/testparser.c
new file mode 100644
index 00000000..625ba100
--- /dev/null
+++ b/testparser.c
@@ -0,0 +1,80 @@
+/*
+ * testparser.c: Additional parser tests
+ *
+ * See Copyright for the status of this software.
+ */
+
+#include <libxml/parser.h>
+
+#ifdef LIBXML_PUSH_ENABLED
+static int
+testHugePush(void) {
+ xmlParserCtxtPtr ctxt;
+ int err, i;
+
+ ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL);
+
+ /*
+ * Push parse a document larger than XML_MAX_LOOKUP_LIMIT
+ * (10,000,000 bytes). This mainly tests whether shrinking the
+ * buffer works when push parsing.
+ */
+ xmlParseChunk(ctxt, "<doc>", 5, 0);
+ for (i = 0; i < 1000000; i++)
+ xmlParseChunk(ctxt, "<elem>text</elem>", 17, 0);
+ xmlParseChunk(ctxt, "</doc>", 6, 1);
+
+ err = ctxt->wellFormed ? 0 : 1;
+ xmlFreeDoc(ctxt->myDoc);
+ xmlFreeParserCtxt(ctxt);
+
+ return err;
+}
+
+static int
+testHugeEncodedChunk(void) {
+ xmlBufferPtr buf;
+ xmlChar *chunk;
+ xmlParserCtxtPtr ctxt;
+ int err, i;
+
+ /*
+ * Test the push parser with a built-in encoding handler like ISO-8859-1
+ * and a chunk larger than the initial decoded buffer (currently 4 KB).
+ */
+ buf = xmlBufferCreate();
+ xmlBufferCat(buf,
+ BAD_CAST "<?xml version='1.0' encoding='ISO-8859-1'?>\n");
+ xmlBufferCat(buf, BAD_CAST "<doc><!-- ");
+ for (i = 0; i < 2000; i++)
+ xmlBufferCat(buf, BAD_CAST "0123456789");
+ xmlBufferCat(buf, BAD_CAST " --></doc>");
+ chunk = xmlBufferDetach(buf);
+ xmlBufferFree(buf);
+
+ ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL);
+
+ xmlParseChunk(ctxt, (char *) chunk, xmlStrlen(chunk), 0);
+ xmlParseChunk(ctxt, NULL, 0, 1);
+
+ err = ctxt->wellFormed ? 0 : 1;
+ xmlFreeDoc(ctxt->myDoc);
+ xmlFreeParserCtxt(ctxt);
+ xmlFree(chunk);
+
+ return err;
+}
+#endif
+
+int
+main(void) {
+ int err = 0;
+
+#ifdef LIBXML_PUSH_ENABLED
+ err |= testHugePush();
+ err |= testHugeEncodedChunk();
+#endif
+
+ return err;
+}
+
diff --git a/testrecurse.c b/testrecurse.c
index 01e15b2c..c5832905 100644
--- a/testrecurse.c
+++ b/testrecurse.c
@@ -444,7 +444,7 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
}
static void
-testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, xmlErrorPtr err) {
+testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, const xmlError *err) {
char *file = NULL;
int line = 0;
int code = -1;
diff --git a/threads.c b/threads.c
index a43f6fd2..3e8ef2fe 100644
--- a/threads.c
+++ b/threads.c
@@ -579,6 +579,7 @@ xmlInitParser(void) {
if (xmlParserInnerInitialized == 0) {
#if defined(_WIN32) && \
+ !defined(LIBXML_THREAD_ALLOC_ENABLED) && \
(!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
if (xmlFree == free)
atexit(xmlCleanupParser);
@@ -665,7 +666,9 @@ xmlCleanupParser(void) {
xmlParserInnerInitialized = 0;
}
-#if defined(HAVE_ATTRIBUTE_DESTRUCTOR) && !defined(LIBXML_STATIC) && \
+#if defined(HAVE_ATTRIBUTE_DESTRUCTOR) && \
+ !defined(LIBXML_THREAD_ALLOC_ENABLED) && \
+ !defined(LIBXML_STATIC) && \
!defined(_WIN32)
static void
ATTRIBUTE_DESTRUCTOR
diff --git a/xmlreader.c b/xmlreader.c
index c04cb113..5c37738e 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -3973,10 +3973,10 @@ xmlTextReaderValidityWarningRelay(void *ctx, const char *msg, ...)
}
static void
- xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error);
+xmlTextReaderStructuredError(void *ctxt, const xmlError *error);
static void
-xmlTextReaderValidityStructuredRelay(void *userData, xmlErrorPtr error)
+xmlTextReaderValidityStructuredRelay(void *userData, const xmlError *error)
{
xmlTextReaderPtr reader = (xmlTextReaderPtr) userData;
@@ -4707,7 +4707,7 @@ xmlTextReaderGenericError(void *ctxt, xmlParserSeverities severity,
}
static void
-xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error)
+xmlTextReaderStructuredError(void *ctxt, const xmlError *error)
{
xmlParserCtxtPtr ctx = (xmlParserCtxtPtr) ctxt;
diff --git a/xmlschemas.c b/xmlschemas.c
index b9c61b82..d276faf1 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -22744,7 +22744,7 @@ xmlSchemaXPathProcessHistory(xmlSchemaValidCtxtPtr vctxt,
} else if (pos >= matcher->sizeKeySeqs) {
int i = matcher->sizeKeySeqs;
- matcher->sizeKeySeqs *= 2;
+ matcher->sizeKeySeqs = pos * 2;
matcher->keySeqs = (xmlSchemaPSVIIDCKeyPtr **)
xmlRealloc(matcher->keySeqs,
matcher->sizeKeySeqs *