### ----------------------------------------------------
### -- LibXML
### -- Licenses: Artistic-2.0
### -- Authors: David Warring
### -- File: etc/libxml2-api.xml
### ----------------------------------------------------
### -- Chunk 25 of 44
 error, or the total number of features, len is updated with the number of strings copied, strings must not be deallocated'/>
      <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>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>
    <function name='xmlGetID' file='valid' module='valid'>
      <info>Search the attribute declaring the given ID</info>
      <return type='xmlAttrPtr' info='NULL if not found, otherwise the xmlAttrPtr defining the ID'/>
      <arg name='doc' type='xmlDocPtr' info='pointer to the document'/>
      <arg name='ID' type='const xmlChar *' info='the ID value'/>
    </function>
    <function name='xmlGetIntSubset' file='tree' module='tree'>
      <info>Get the internal subset of a document</info>
      <return type='xmlDtdPtr' info='a pointer to the DTD structure or NULL if not found'/>
      <arg name='doc' type='const xmlDoc *' info='the document pointer'/>
    </function>
    <function name='xmlGetLastChild' file='tree' module='tree'>
      <info>Search the last child of a node.</info>
      <return type='xmlNodePtr' info='the last child or NULL if none.'/>
      <arg name='parent' type='const xmlNode *' info='the parent node'/>
    </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='xmlErrorPtr' info='NULL if no error occurred or 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>
      <return type='long' info='the line number if successful, -1 otherwise'/>
      <arg name='node' type='const xmlNode *' info='valid node'/>
    </function>
    <function name='xmlGetNoNsProp' file='tree' module='tree'>
      <info>Search and get the value of an attribute associated to a node This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. This function is similar to xmlGetProp except it will accept only an attribute in no namespace.</info>
      <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
      <arg name='node' type='const xmlNode *' info='the node'/>
      <arg name='name' type='const xmlChar *' info='the attribute name'/>
    </function>
    <function name='xmlGetNodePath' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)</cond>
      <info>Build a structure based Path for the given node</info>
      <return type='xmlChar *' info='the new path or NULL in case of error. The caller must free the returned string'/>
      <arg name='node' type='const xmlNode *' info='a node'/>
    </function>
    <function name='xmlGetNsList' file='tree' module='tree'>
      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
      <info>Search all the namespace applying to a given element.</info>
      <return type='xmlNsPtr *' info='an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined'/>
      <arg name='doc' type='const xmlDoc *' info='the document'/>
      <arg name='node' type='const xmlNode *' info='the current node'/>
    </function>
    <function name='xmlGetNsProp' file='tree' module='tree'>
      <info>Search and get the value of an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
      <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
      <arg name='node' type='const xmlNode *' info='the node'/>
      <arg name='name' type='const xmlChar *' info='the attribute name'/>
      <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
    </function>
    <function name='xmlGetParameterEntity' file='entities' module='entities'>
      <info>Do an entity lookup in the internal and external subsets and</info>
      <return type='xmlEntityPtr' info='the corresponding parameter entity, if found.  Returns A pointer to the entity structure or NULL if not found.'/>
      <arg name='doc' type='xmlDocPtr' info='the document referencing the entity'/>
      <arg name='name' type='const xmlChar *' info='the entity name'/>
    </function>
    <function name='xmlGetPredefinedEntity' file='entities' module='entities'>
      <info>Check whether this name is an predefined entity.</info>
      <return type='xmlEntityPtr' info='NULL if not, otherwise the entity'/>
      <arg name='name' type='const xmlChar *' info='the entity name'/>
    </function>
    <function name='xmlGetProp' file='tree' module='tree'>
      <info>Search and get the value of an attribute associated to a node This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. NOTE: this function acts independently of namespaces associated to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp() for namespace aware processing.</info>
      <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
      <arg name='node' type='const xmlNode *' info='the node'/>
      <arg name='name' type='const xmlChar *' info='the attribute name'/>
    </function>
    <function name='xmlGetRefs' file='valid' module='valid'>
      <info>Find the set of references for the supplied ID.</info>
      <return type='xmlListPtr' info='NULL if not found, otherwise node set for the ID.'/>
      <arg name='doc' type='xmlDocPtr' info='pointer to the document'/>
      <arg name='ID' type='const xmlChar *' info='the ID value'/>
    </function>
    <function name='xmlGetThreadId' file='threads' module='threads'>
      <info>xmlGetThreadId() find the current thread ID number Note that this is likely to be broken on some platforms using pthreads as the specification doesn&apos;t mandate pthread_t to be an integer type</info>
      <return type='int' info='the current thread ID number'/>
    </function>
    <function name='xmlGetUTF8Char' file='xmlstring' module='xmlstring'>
      <info>Read the first UTF8 character from @utf</info>
      <return type='int' info='the char value or -1 in case of error, and sets *len to the actual number of bytes consumed (0 in case of error)'/>
      <arg name='utf' type='const unsigned char *' info='a sequence of UTF-8 encoded bytes'/>
      <arg name='len' type='int *' info='a pointer to the minimum number of bytes present in the sequence.  This is used to assure the next character is completely contained within the sequence.'/>
    </function>
    <function name='xmlHandleEntity' file='parserInternals' module='legacy'>
      <cond>defined(LIBXML_LEGACY_ENABLED)</cond>
      <info>Default handling of defined entities, when should we define a new input stream ? When do we just handle that as a set of chars ?  OBSOLETE: to be removed at some point.</info>
      <return type='void'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
      <arg name='entity' type='xmlEntityPtr' info='an XML entity pointer.'/>
    </function>
    <function name='xmlHasFeature' file='parser' module='parser'>
      <info>Examines if the library has been compiled with a given feature.</info>
      <return type='int' info='a non-zero value if the feature exist, otherwise zero. Returns zero (0) if the feature does not exist or an unknown unknown feature is requested, non-zero otherwise.'/>
      <arg name='feature' type='xmlFeature' info='the feature to be examined'/>
    </function>
    <function name='xmlHasNsProp' file='tree' module='tree'>
      <info>Search for an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace.</info>
      <return type='xmlAttrPtr' info='the attribute or the attribute declaration or NULL if neither was found.'/>
      <arg name='node' type='const xmlNode *' info='the node'/>
      <arg name='name' type='const xmlChar *' info='the attribute name'/>
      <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
    </function>
    <function name='xmlHasProp' file='tree' module='tree'>
      <info>Search an attribute associated to a node This function also looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
      <return type='xmlAttrPtr' info='the attribute or the attribute declaration or NULL if neither was found.'/>
      <arg name='node' type='const xmlNode *' info='the node'/>
      <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'/>
    </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'/>
    </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'/>
    </function>
    <functype name='xmlHashCopier' file='hash' module='hash'>
      <info>Callback to copy data from a hash.</info>
      <return type='void *' info='a copy of the data or NULL in case of error.'/>
      <arg name='payload' type='void *' info='the data in the hash'/>
      <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'/>
    </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'/>
    </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.'/>
      <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>
    <functype name='xmlHashDeallocator' file='hash' module='hash'>
      <info>Callback to free data from a hash.</info>
      <return type='void'/>
      <arg name='payload' type='void *' info='the data in the hash'/>
      <arg name='name' type='const xmlChar *' info='the name associated'/>
    </functype>
    <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'/>
    </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>
      <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'/>
    </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'/>
    </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'/>
    </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'/>
    </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'/>
    </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'/>
    </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'/>
    </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)'/>
    </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)'/>
    </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)'/>
    </function>
    <function name='xmlHashScan' file='hash' module='hash'>
      <info>Scan the hash @table and applied @f 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'/>
    </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>
      <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'/>
    </function>
    <function name='xmlHashScanFull' file='hash' module='hash'>
      <info>Scan the hash @table and applied @f 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'/>
    </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>
      <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'/>
    </function>
    <functype name='xmlHashScanner' file='hash' module='hash'>
      <info>Callback when scanning data in a hash with the simple scanner.</info>
      <return type='void'/>
      <arg name='payload' type='void *' info='the data in the hash'/>
      <arg name='data' type='void *' info='extra scannner data'/>
      <arg name='name' type='const xmlChar *' info='the name associated'/>
    </functype>
    <functype name='xmlHashScannerFull' file='hash' module='hash'>
      <info>Callback when scanning data in a hash with the full scanner.</info>
      <return type='void'/>
      <arg name='payload' type='void *' info='the data in the hash'/>
      <arg name='data' type='void *' info='extra scannner data'/>
      <arg name='name' type='const xmlChar *' info='the name associated'/>
      <arg name='name2' type='const xmlChar *' info='the second name associated'/>
      <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'/>
    </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)'/>
    </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)'/>
    </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)'/>
    </function>
    <function name='xmlIOFTPClose' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_FTP_ENABLED)</cond>
      <info>Close an FTP I/O channel</info>
      <return type='int' info='0'/>
      <arg name='context' type='void *' info='the I/O context'/>
    </function>
    <function name='xmlIOFTPMatch' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_FTP_ENABLED)</cond>
      <info>check if the URI matches an FTP one</info>
      <return type='int' info='1 if matches, 0 otherwise'/>
      <arg name='filename' type='const char *' info='the URI for matching'/>
    </function>
    <function name='xmlIOFTPOpen' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_FTP_ENABLED)</cond>
      <info>open an FTP I/O channel</info>
      <return type='void *' info='an I/O context or NULL in case of error'/>
      <arg name='filename' type='const char *' info='the URI for matching'/>
    </function>
    <function name='xmlIOFTPRead' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_FTP_ENABLED)</cond>
      <info>Read @len bytes to @buffer from the I/O channel.</info>
      <return type='int' info='the number of bytes written'/>
      <arg name='context' type='void *' info='the I/O context'/>
      <arg name='buffer' type='char *' info='where to drop data'/>
      <arg name='len' type='int' info='number of bytes to write'/>
    </function>
    <function name='xmlIOHTTPClose' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_HTTP_ENABLED)</cond>
      <info>Close an HTTP I/O channel</info>
      <return type='int' info='0'/>
      <arg name='context' type='void *' info='the I/O context'/>
    </function>
    <function name='xmlIOHTTPMatch' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_HTTP_ENABLED)</cond>
      <info>check if the URI matches an HTTP one</info>
      <return type='int' info='1 if matches, 0 otherwise'/>
      <arg name='filename' type='const char *' info='the URI for matching'/>
    </function>
    <function name='xmlIOHTTPOpen' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_HTTP_ENABLED)</cond>
      <info>open an HTTP I/O channel</info>
      <return type='void *' info='an I/O context or NULL in case of error'/>
      <arg name='filename' type='const char *' info='the URI for matching'/>
    </function>
    <function name='xmlIOHTTPOpenW' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_HTTP_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
      <info>Open a temporary buffer to collect the document for a subsequent HTTP POST request.  Non-static as is called from the output buffer creation routine.</info>
      <return type='void *' info='an I/O context or NULL in case of error.'/>
      <arg name='post_uri' type='const char *' info='The destination URI for the document'/>
      <arg name='compression' type='int' info='The compression desired for the document.'/>
    </function>
    <function name='xmlIOHTTPRead' file='xmlIO' module='xmlIO'>
      <cond>defined(LIBXML_HTTP_ENABLED)</cond>
      <info>Read @len bytes to @buffer from the I/O channel.</info>
      <return type='int' info='the number of bytes written'/>
      <arg name='context' type='void *' info='the I/O context'/>
      <arg name='buffer' type='char *' info='where to drop data'/>
      <arg name='len' type='int' info='number of bytes to write'/>
    </function>
    <function name='xmlIOParseDTD' file='parser' module='parser'>
      <cond>defined(LIBXML_VALID_ENABLED)</cond>
      <info>Load and parse a DTD</info>
      <return type='xmlDtdPtr' info='the resulting xmlDtdPtr or NULL in case of error. @input will be freed by the function in any case.'/>
      <arg name='sax' type='xmlSAXHandlerPtr' info='the SAX handler block or NULL'/>
      <arg name='input' type='xmlParserInputBufferPtr' info='an Input Buffer'/>
      <arg name='enc' type='xmlCharEncoding' info='the charset encoding if known'/>
    </function>
    <function name='xmlInitCharEncodingHandlers' file='encoding' module='encoding'>
      <info>Initialize the char encoding support, it registers the default encoding supported. NOTE: while public, this function usually doesn&apos;t need to be called in normal processing.</info>
      <return type='void'/>
    </function>
    <function name='xmlInitGlobals' file='globals' module='globals'>
      <info>Additional initialisation for multi-threading</info>
      <return type='void'/>
    </function>
    <function name='xmlInitMemory' file='xmlmemory' module='xmlmemory'>
      <info>Initialize the memory layer.</info>
      <return type='int' info='0 on success'/>
    </function>
    <function name='xmlInitNodeInfoSeq' file='parser' module='parserInternals'>
      <info>-- Initialize (set to initial state) node info sequence</info>
      <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>
      <return type='void'/>
    </function>
    <function name='xmlInitParserCtxt' file='parser' module='parserInternals'>
      <info>Initialize a parser context</info>
      <return type='int' info='0 in case of success and -1 in case of error'/>
      <arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
    </function>
    <function name='xmlInitThreads' file='threads' module='threads'>
      <info>xmlInitThreads() is used to to initialize all the thread related data of the libxml2 library.</info>
      <return type='void'/>
    </function>
