catalog.c revision 38ae7e4efe803ea78b6499cd05a394db32623e41
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * catalog.c: set of generic Catalog related routines
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Reference: SGML Open Technical Resolution TR9401:1997.
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync * XML Catalogs Working Draft 06 August 2001
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * See Copyright for the status of this software.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Daniel.Veillard@imag.fr
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * macro to flag unimplemented blocks
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * XML_CATALOG_PREFER user env to select between system/public prefered
710a6316a22868b04400caf79719f96c18163cd3vboxsync * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync *> values "system" and "public". I have made the default be "system" to
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync *> match yours.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync "Unimplemented block at %s:%d\n", \
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#define XML_SGML_DEFAULT_CATALOG "file:///etc/sgml/catalog"
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncstatic char XML_XML_DEFAULT_CATALOG[256] = "file:///etc/xml/catalog";
fb1975a6972d89de9e515bed0248db93f04ec9d8vboxsync/* Windows CE don't have a A variant */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncunsigned long __stdcall GetModuleFileNameA(void*, char*, unsigned long);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncstatic xmlChar *xmlCatalogNormalizePublic(const xmlChar *pubID);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsyncstatic int xmlExpandCatalog(xmlCatalogPtr catal, const char *filename);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/************************************************************************
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Types, all private *
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync ************************************************************************/
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsynctypedef enum {
41b3442e21c3a79f3bc61ce67e3445757a83f281vboxsync xmlChar *URL; /* The expanded URL using the base */
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsynctypedef enum {
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * SGML Catalogs are stored as a simple hash table of catalog entries
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Catalog stack to check against overflows when building the
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * SGML catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync char *catalTab[XML_MAX_SGML_CATA_DEPTH]; /* stack of catals */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * XML Catalogs are stored as a tree of Catalog entries
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync/************************************************************************
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Global variables *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync ************************************************************************/
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Those are preferences
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsyncstatic int xmlDebugCatalogs = 0; /* used for debugging */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncstatic xmlCatalogAllow xmlCatalogDefaultAllow = XML_CATA_ALLOW_ALL;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncstatic xmlCatalogPrefer xmlCatalogDefaultPrefer = XML_CATA_PREFER_PUBLIC;
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * Hash table containing all the trees of XML catalogs parsed by
5f2909f8dd32d40a7e87f636c1a7c9de674be94bvboxsync * the application.
5f2909f8dd32d40a7e87f636c1a7c9de674be94bvboxsync * The default catalog in use by the application
2ca0ef39e90f953a6517aa2a658146c70485425dvboxsync * A mutex for modifying the shared global catalog(s)
2ca0ef39e90f953a6517aa2a658146c70485425dvboxsync * xmlDefaultCatalog tree.
5f2909f8dd32d40a7e87f636c1a7c9de674be94bvboxsync * It also protects xmlCatalogXMLFiles
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * The core of this readers/writer scheme is in xmlFetchXMLCatalogFile()
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Whether the catalog support was initialized.
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync/************************************************************************
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * Catalog error handlers *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync ************************************************************************/
a771f44b96a464259788456c0c68e049e7588066vboxsync * xmlCatalogErrMemory:
a771f44b96a464259788456c0c68e049e7588066vboxsync * @extra: extra informations
a771f44b96a464259788456c0c68e049e7588066vboxsync * Handle an out of memory condition
a771f44b96a464259788456c0c68e049e7588066vboxsync __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_CATALOG,
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * xmlCatalogErr:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @catal: the Catalog entry
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync * @node: the context node
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * @msg: the error message
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * @extra: extra informations
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * Handle a catalog error
41b3442e21c3a79f3bc61ce67e3445757a83f281vboxsyncxmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync const char *msg, const xmlChar *str1, const xmlChar *str2,
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync __xmlRaiseError(NULL, NULL, NULL, catal, node, XML_FROM_CATALOG,
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync (const char *) str3, 0, 0,
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/************************************************************************
41b3442e21c3a79f3bc61ce67e3445757a83f281vboxsync * Allocation and Freeing *
41b3442e21c3a79f3bc61ce67e3445757a83f281vboxsync ************************************************************************/
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * xmlNewCatalogEntry:
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * @type: type of entry
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @name: name of the entry
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * @value: value of the entry
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @prefer: the PUBLIC vs. SYSTEM current preference value
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @group: for members of a group, the group entry
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * create a new Catalog entry, this type is shared both by XML and
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * SGML catalogs, but the acceptable types values differs.
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * Returns the xmlCatalogEntryPtr or NULL in case of error
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsyncxmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name,
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer,
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync ret = (xmlCatalogEntryPtr) xmlMalloc(sizeof(xmlCatalogEntry));
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync if (type == XML_CATA_PUBLIC || type == XML_CATA_DELEGATE_PUBLIC) {
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * xmlFreeCatalogEntry:
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * @ret: a Catalog entry
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * Free the memory allocated to a Catalog entry
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * Entries stored in the file hash must be deallocated
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * only by the file hash cleaner !
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync "Free catalog entry\n");
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * xmlFreeCatalogEntryList:
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * @ret: a Catalog entry list
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * Free the memory allocated to a full chained list of Catalog entries
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * xmlFreeCatalogHashEntryList:
6320f517ddc16e8d8dd450a47edfaab81f67942avboxsync * @ret: a Catalog entry list
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * Free the memory allocated to list of Catalog entries from the
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * catalog file hash.
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsyncxmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) {
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * xmlCreateNewCatalog:
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * @type: type of catalog
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * @prefer: the PUBLIC vs. SYSTEM current preference value
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * create a new Catalog, this type is shared both by XML and
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * SGML catalogs, but the acceptable types values differs.
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync * Returns the xmlCatalogPtr or NULL in case of error
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsyncxmlCreateNewCatalog(xmlCatalogType type, xmlCatalogPrefer prefer) {
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync ret = (xmlCatalogPtr) xmlMalloc(sizeof(xmlCatalog));
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlFreeCatalog:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @catal: a Catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Free the memory allocated to a Catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/************************************************************************
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Serializing Catalogs *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync ************************************************************************/
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlCatalogDumpEntry:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @entry: the catalog entry
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @out: the file.
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * Serialize an SGML Catalog entry
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncxmlCatalogDumpEntry(xmlCatalogEntryPtr entry, FILE *out) {
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync fprintf(out, "%s", (const char *) entry->name); break;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlDumpXMLCatalogNode:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @catal: top catalog entry
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @catalog: pointer to the xml tree
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @doc: the containing document
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @ns: the current namespace
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @cgroup: group node for group members
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Serializes a Catalog entry, called by xmlDumpXMLCatalog and recursively
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync * for group entries
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncstatic void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog,
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync xmlDocPtr doc, xmlNsPtr ns, xmlCatalogEntryPtr cgroup) {
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * add all the catalog entries
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "group", NULL);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync xns = xmlSearchNsByHref(doc, node, XML_XML_NAMESPACE);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "public");
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "system");
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync xmlDumpXMLCatalogNode(cur->next, node, doc, ns, cur);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name);
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsyncxmlDumpXMLCatalog(FILE *out, xmlCatalogEntryPtr catal) {
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Rebuild a catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync return(-1);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync BAD_CAST "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN",
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncBAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd");
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync return(-1);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync catalog = xmlNewDocNode(doc, ns, BAD_CAST "catalog", NULL);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync return(-1);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * reserialize it
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync return(-1);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#endif /* LIBXML_OUTPUT_ENABLED */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/************************************************************************
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Converting SGML Catalogs to XML *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync ************************************************************************/
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlCatalogConvertEntry:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @entry: the entry
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @catal: pointer to the catalog being converted
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Convert one entry from the catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncxmlCatalogConvertEntry(xmlCatalogEntryPtr entry, xmlCatalogPtr catal) {
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync if ((entry == NULL) || (catal == NULL) || (catal->sgml == NULL) ||
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Conversion successful, remove from the SGML catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * and add it to the default XML one
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync xmlHashRemoveEntry(catal->sgml, entry->name, NULL);
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync * xmlConvertSGMLCatalog:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @catal: the catalog
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Convert all the SGML catalog entries as XML ones
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Returns the number of entries converted if successful, -1 otherwise
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync if ((catal == NULL) || (catal->type != XML_SGML_CATALOG_TYPE))
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync return(-1);
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync "Converting SGML catalog to XML\n");
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/************************************************************************
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Helper function *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync ************************************************************************/
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlCatalogUnWrapURN:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @urn: an "urn:publicid:" to unwrap
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Expand the URN into the equivalent Public Identifier
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Returns the new identifier or NULL, the string must be deallocated
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync * by the caller.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync unsigned int i = 0;
b306a397b157898e6f769f640b0dfdffbf8beec7vboxsync if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1))
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync while (*urn != 0) {
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlParseCatalogFile:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @filename: the filename
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * parse an XML file and build a tree. It's like xmlParseFile()
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * except it bypass all catalog lookups.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Returns the resulting document tree or NULL in case of error
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsync xmlDefaultSAXHandler.error(NULL, "out of memory\n");
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync inputStream->base = inputStream->buf->buffer->content;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync inputStream->cur = inputStream->buf->buffer->content;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync if ((ctxt->directory == NULL) && (directory == NULL))
aceec09dd145a4d6fb14f2ea75a459cc88b334abvboxsync if ((ctxt->directory == NULL) && (directory != NULL))
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * xmlLoadFileContent:
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @filename: a file path
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Load a file content into memory.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Returns a pointer to the 0 terminated string or NULL in case of error
int len;
long size;
#ifdef HAVE_STAT
return (NULL);
#ifdef HAVE_STAT
return (NULL);
#ifdef HAVE_STAT
return (NULL);
#ifdef HAVE_STAT
if (fseek(fd, 0, SEEK_END) || (size = ftell(fd)) == EOF || fseek(fd, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */
return (NULL);
return (NULL);
#ifdef HAVE_STAT
if (len < 0) {
return (NULL);
#ifdef HAVE_STAT
return(content);
static xmlChar *
int white;
const xmlChar *p;
xmlChar *q;
return(NULL);
if (!xmlIsBlank_ch(*p))
white = 0;
ok = 0;
return(NULL);
q = ret;
white = 0;
for (p = pubID;*p != 0;p++) {
if (xmlIsBlank_ch(*p)) {
if (q != ret)
if (white) {
white = 0;
return(ret);
static xmlCatalogEntryPtr
static xmlChar *
static xmlChar *
static xmlCatalogEntryType
return(type);
static xmlCatalogEntryPtr
ok = 0;
ok = 0;
if (!ok) {
return(NULL);
return(ret);
static xmlCatalogEntryPtr
return(NULL);
if (xmlDebugCatalogs)
return(NULL);
if (xmlDebugCatalogs)
return(NULL);
return(NULL);
return(parent);
if (xmlDebugCatalogs)
if (xmlDebugCatalogs)
if (xmlDebugCatalogs)
int doregister = 0;
if (xmlDebugCatalogs)
if (xmlDebugCatalogs)
if (xmlDebugCatalogs)
if (doregister) {
int ret = 0;
if (xmlDebugCatalogs) {
return(ret);
static xmlChar *
int haveDelegate = 0;
int haveNext = 0;
return(NULL);
haveDelegate = 0;
case XML_CATA_SYSTEM:
if (xmlDebugCatalogs)
case XML_CATA_REWRITE_SYSTEM:
case XML_CATA_DELEGATE_SYSTEM:
haveDelegate++;
case XML_CATA_NEXT_CATALOG:
haveNext++;
if (xmlDebugCatalogs)
return(ret);
if (haveDelegate) {
int nbList = 0, i;
for (i = 0;i < nbList;i++)
if (i < nbList) {
if (xmlDebugCatalogs)
return(ret);
return(XML_CATAL_BREAK);
haveDelegate = 0;
case XML_CATA_PUBLIC:
if (xmlDebugCatalogs)
case XML_CATA_DELEGATE_PUBLIC:
haveDelegate++;
case XML_CATA_NEXT_CATALOG:
haveNext++;
if (haveDelegate) {
int nbList = 0, i;
for (i = 0;i < nbList;i++)
if (i < nbList) {
if (xmlDebugCatalogs)
return(ret);
return(XML_CATAL_BREAK);
if (haveNext) {
return(ret);
return(NULL);
return(NULL);
static xmlChar *
int haveDelegate = 0;
int haveNext = 0;
return(NULL);
return(NULL);
return(NULL);
haveDelegate = 0;
case XML_CATA_URI:
if (xmlDebugCatalogs)
case XML_CATA_REWRITE_URI:
case XML_CATA_DELEGATE_URI:
haveDelegate++;
case XML_CATA_NEXT_CATALOG:
haveNext++;
if (xmlDebugCatalogs)
return(ret);
if (haveDelegate) {
int nbList = 0, i;
for (i = 0;i < nbList;i++)
if (i < nbList) {
if (xmlDebugCatalogs)
return(ret);
return(XML_CATAL_BREAK);
if (haveNext) {
return(ret);
return(NULL);
static xmlChar *
return(NULL);
return(NULL);
if (xmlDebugCatalogs) {
return(ret);
if (xmlDebugCatalogs) {
return(ret);
return(ret);
static xmlChar *
return(NULL);
return(NULL);
if (xmlDebugCatalogs) {
return(ret);
return(ret);
return(ret);
static const xmlChar *
return(cur);
NEXT;
if (cur[0] == 0) {
return(NULL);
static const xmlChar *
int len = 0;
int count = 0;
NEXT;
NEXT;
return(NULL);
return(NULL);
count++;
NEXT;
return(NULL);
return(NULL);
NEXT;
return(cur);
static const xmlChar *
int len = 0;
c = *cur;
return(NULL);
cur++;
c = *cur;
return(NULL);
return(cur);
static xmlCatalogEntryType
return(type);
int res;
if (cur[0] == 0)
switch(type) {
case SGML_CATA_ENTITY:
case SGML_CATA_PENTITY:
case SGML_CATA_DOCTYPE:
case SGML_CATA_LINKTYPE:
case SGML_CATA_NOTATION:
case SGML_CATA_PUBLIC:
case SGML_CATA_SYSTEM:
case SGML_CATA_DELEGATE:
if (*normid != 0)
case SGML_CATA_BASE:
case SGML_CATA_CATALOG:
case SGML_CATA_DOCUMENT:
case SGML_CATA_SGMLDECL:
if (res < 0) {
if (super) {
if (res < 0) {
static const xmlChar *
return(NULL);
return(NULL);
return(NULL);
static const xmlChar *
return(NULL);
return(NULL);
return(NULL);
static const xmlChar *
return(NULL);
return(ret);
return(NULL);
int ret;
return(NULL);
return(NULL);
if (ret < 0) {
return(NULL);
return (catal);
int ret;
return(NULL);
first++;
return(NULL);
if (ret < 0) {
return(NULL);
return(NULL);
return (catal);
int ret;
if (ret < 0) {
xmlChar *
return(NULL);
if (xmlDebugCatalogs)
return(ret);
xmlChar *
return(NULL);
if (xmlDebugCatalogs)
return(ret);
xmlChar *
return (NULL);
if (xmlDebugCatalogs) {
return (ret);
xmlChar *
return(NULL);
if (xmlDebugCatalogs)
return(ret);
#ifdef LIBXML_OUTPUT_ENABLED
return (res);
if (res == 0)
return(res);
if (sgml) {
return(catal);
int res;
if (res == 0)
if (res < 0)
xmlInitializeCatalogData(void) {
if (xmlCatalogInitialized != 0)
xmlInitializeCatalog(void) {
if (xmlCatalogInitialized != 0)
const char *catalogs;
char *path;
void* hmodule;
if (len != 0) {
if (p != buf) {
cur++;
if (*cur != 0) {
cur++;
int ret;
if (!xmlCatalogInitialized)
return(ret);
const char *cur;
const char *paths;
#ifdef _WIN32
int i, iLen;
while (*cur != 0) {
if (*cur != 0) {
cur++;
#ifdef _WIN32
for(i = 0; i < iLen; i++) {
cur++;
xmlCatalogCleanup(void) {
if (xmlCatalogInitialized == 0)
if (xmlDebugCatalogs)
xmlDebugCatalogs = 0;
xmlChar *
if (!xmlCatalogInitialized)
return(ret);
xmlChar *
if (!xmlCatalogInitialized)
return(ret);
xmlChar *
if (!xmlCatalogInitialized)
return(ret);
xmlChar *
if (!xmlCatalogInitialized)
return(ret);
#ifdef LIBXML_OUTPUT_ENABLED
if (!xmlCatalogInitialized)
if (!xmlCatalogInitialized)
return(res);
int res;
if (!xmlCatalogInitialized)
return(res);
xmlCatalogConvert(void) {
if (!xmlCatalogInitialized)
return(res);
* Used to get the user preference w.r.t. to what catalogs should
xmlCatalogGetDefaults(void) {
return(xmlCatalogDefaultAllow);
* Used to set the user preference w.r.t. to what catalogs should
if (xmlDebugCatalogs) {
switch (allow) {
case XML_CATA_ALLOW_NONE:
case XML_CATA_ALLOW_GLOBAL:
case XML_CATA_ALLOW_DOCUMENT:
case XML_CATA_ALLOW_ALL:
return(ret);
if (xmlDebugCatalogs) {
switch (prefer) {
case XML_CATA_PREFER_PUBLIC:
case XML_CATA_PREFER_SYSTEM:
case XML_CATA_PREFER_NONE:
return(ret);
if (level <= 0)
xmlDebugCatalogs = 0;
return(ret);
if (!xmlCatalogInitialized)
if (!xmlCatalogInitialized)
return(catalogs);
if (xmlDebugCatalogs)
return(catalogs);
return((void *) add);
return(catalogs);
xmlChar *
if (!xmlCatalogInitialized)
return(NULL);
if (xmlDebugCatalogs) {
return(NULL);
return(ret);
return(NULL);
xmlChar *
if (!xmlCatalogInitialized)
return(NULL);
if (xmlDebugCatalogs)
return(NULL);
return(ret);
return(NULL);
const xmlChar *
static int msg = 0;
if (!xmlCatalogInitialized)
if (msg == 0) {
msg++;
return(NULL);
return(result);
return(NULL);
const xmlChar *
static int msg = 0;
if (!xmlCatalogInitialized)
if (msg == 0) {
msg++;
return(NULL);
return(result);
return(NULL);
#define bottom_catalog
#include "elfgcchack.h"