summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--catalog.c297
-rw-r--r--parser.c5
-rw-r--r--xmlcatalog.c6
-rw-r--r--xmlstring.c2
5 files changed, 189 insertions, 128 deletions
diff --git a/ChangeLog b/ChangeLog
index 8d8c9b56..e0e4ef22 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Wed Oct 6 09:33:51 PDT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * catalog.c: added code to handle <group>, including dumping
+ to output (bug 151924).
+ * xmlcatalog.c, xmlstring.c, parser.c: minor compiler warning
+ cleanup (no change to logic)
+
Mon Oct 4 16:09:07 CEST 2004 Daniel Veillard <daniel@veillard.com>
* configure.in debugXML.c include/libxml/xmlversion.h.in
diff --git a/catalog.c b/catalog.c
index 5dcc928b..908dda5d 100644
--- a/catalog.c
+++ b/catalog.c
@@ -90,6 +90,7 @@ typedef enum {
XML_CATA_CATALOG,
XML_CATA_BROKEN_CATALOG,
XML_CATA_NEXT_CATALOG,
+ XML_CATA_GROUP,
XML_CATA_PUBLIC,
XML_CATA_SYSTEM,
XML_CATA_REWRITE_SYSTEM,
@@ -125,6 +126,7 @@ struct _xmlCatalogEntry {
xmlCatalogPrefer prefer;
int dealloc;
int depth;
+ struct _xmlCatalogEntry *group;
};
typedef enum {
@@ -245,6 +247,7 @@ xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
* @name: name of the entry
* @value: value of the entry
* @prefer: the PUBLIC vs. SYSTEM current preference value
+ * @group: for members of a group, the group entry
*
* create a new Catalog entry, this type is shared both by XML and
* SGML catalogs, but the acceptable types values differs.
@@ -253,7 +256,8 @@ xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
*/
static xmlCatalogEntryPtr
xmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name,
- const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer) {
+ const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer,
+ xmlCatalogEntryPtr group) {
xmlCatalogEntryPtr ret;
xmlChar *normid = NULL;
@@ -290,6 +294,7 @@ xmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name,
ret->prefer = prefer;
ret->dealloc = 0;
ret->depth = 0;
+ ret->group = group;
return(ret);
}
@@ -504,15 +509,137 @@ xmlCatalogDumpEntry(xmlCatalogEntryPtr entry, FILE *out) {
fprintf(out, "\n");
}
+/**
+ * xmlDumpXMLCatalogNode:
+ * @catal: top catalog entry
+ * @catalog: pointer to the xml tree
+ * @doc: the containing document
+ * @ns: the current namespace
+ * @cgroup: group node for group members
+ *
+ * Serializes a Catalog entry, called by xmlDumpXMLCatalog and recursively
+ * for group entries
+ */
+static void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog,
+ xmlDocPtr doc, xmlNsPtr ns, xmlCatalogEntryPtr cgroup) {
+ xmlNodePtr node;
+ xmlCatalogEntryPtr cur;
+ /*
+ * add all the catalog entries
+ */
+ cur = catal;
+ while (cur != NULL) {
+ if (cur->group == cgroup) {
+ switch (cur->type) {
+ case XML_CATA_REMOVED:
+ break;
+ case XML_CATA_BROKEN_CATALOG:
+ case XML_CATA_CATALOG:
+ if (cur == catal) {
+ cur = cur->children;
+ continue;
+ }
+ break;
+ case XML_CATA_NEXT_CATALOG:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_NONE:
+ break;
+ case XML_CATA_GROUP:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "group", NULL);
+ xmlSetProp(node, BAD_CAST "id", cur->name);
+ if (cur->value != NULL)
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ switch (cur->prefer) {
+ case XML_CATA_PREFER_NONE:
+ break;
+ case XML_CATA_PREFER_PUBLIC:
+ xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "public");
+ break;
+ case XML_CATA_PREFER_SYSTEM:
+ xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "system");
+ break;
+ }
+ xmlDumpXMLCatalogNode(cur->next, node, doc, ns, cur);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_PUBLIC:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL);
+ xmlSetProp(node, BAD_CAST "publicId", cur->name);
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_SYSTEM:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL);
+ xmlSetProp(node, BAD_CAST "systemId", cur->name);
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_REWRITE_SYSTEM:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL);
+ xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_DELEGATE_PUBLIC:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL);
+ xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_DELEGATE_SYSTEM:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL);
+ xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_URI:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL);
+ xmlSetProp(node, BAD_CAST "name", cur->name);
+ xmlSetProp(node, BAD_CAST "uri", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_REWRITE_URI:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL);
+ xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case XML_CATA_DELEGATE_URI:
+ node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL);
+ xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
+ xmlSetProp(node, BAD_CAST "catalog", cur->value);
+ xmlAddChild(catalog, node);
+ break;
+ case SGML_CATA_SYSTEM:
+ case SGML_CATA_PUBLIC:
+ case SGML_CATA_ENTITY:
+ case SGML_CATA_PENTITY:
+ case SGML_CATA_DOCTYPE:
+ case SGML_CATA_LINKTYPE:
+ case SGML_CATA_NOTATION:
+ case SGML_CATA_DELEGATE:
+ case SGML_CATA_BASE:
+ case SGML_CATA_CATALOG:
+ case SGML_CATA_DOCUMENT:
+ case SGML_CATA_SGMLDECL:
+ break;
+ }
+ }
+ cur = cur->next;
+ }
+}
+
static int
xmlDumpXMLCatalog(FILE *out, xmlCatalogEntryPtr catal) {
int ret;
xmlDocPtr doc;
xmlNsPtr ns;
xmlDtdPtr dtd;
- xmlNodePtr node, catalog;
+ xmlNodePtr catalog;
xmlOutputBufferPtr buf;
- xmlCatalogEntryPtr cur;
/*
* Rebuild a catalog
@@ -540,93 +667,8 @@ BAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd");
catalog->nsDef = ns;
xmlAddChild((xmlNodePtr) doc, catalog);
- /*
- * add all the catalog entries
- */
- cur = catal;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_CATA_REMOVED:
- break;
- case XML_CATA_BROKEN_CATALOG:
- case XML_CATA_CATALOG:
- if (cur == catal) {
- cur = cur->children;
- continue;
- }
- break;
- case XML_CATA_NEXT_CATALOG:
- node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_NONE:
- break;
- case XML_CATA_PUBLIC:
- node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL);
- xmlSetProp(node, BAD_CAST "publicId", cur->name);
- xmlSetProp(node, BAD_CAST "uri", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_SYSTEM:
- node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL);
- xmlSetProp(node, BAD_CAST "systemId", cur->name);
- xmlSetProp(node, BAD_CAST "uri", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_REWRITE_SYSTEM:
- node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL);
- xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
- xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_DELEGATE_PUBLIC:
- node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL);
- xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_DELEGATE_SYSTEM:
- node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL);
- xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_URI:
- node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL);
- xmlSetProp(node, BAD_CAST "name", cur->name);
- xmlSetProp(node, BAD_CAST "uri", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_REWRITE_URI:
- node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL);
- xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
- xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_DELEGATE_URI:
- node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL);
- xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case SGML_CATA_SYSTEM:
- case SGML_CATA_PUBLIC:
- case SGML_CATA_ENTITY:
- case SGML_CATA_PENTITY:
- case SGML_CATA_DOCTYPE:
- case SGML_CATA_LINKTYPE:
- case SGML_CATA_NOTATION:
- case SGML_CATA_DELEGATE:
- case SGML_CATA_BASE:
- case SGML_CATA_CATALOG:
- case SGML_CATA_DOCUMENT:
- case SGML_CATA_SGMLDECL:
- break;
- }
- cur = cur->next;
- }
-
+ xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL);
+
/*
* reserialize it
*/
@@ -1017,7 +1059,7 @@ static xmlCatalogEntryPtr
xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename);
static void
xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr parent);
+ xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup);
static xmlChar *
xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
const xmlChar *sysID);
@@ -1067,6 +1109,7 @@ xmlGetXMLCatalogEntryType(const xmlChar *name) {
* @attrName: the attribute holding the value
* @uriAttrName: the attribute holding the URI-Reference
* @prefer: the PUBLIC vs. SYSTEM current preference value
+ * @cgroup: the group which includes this node
*
* Finishes the examination of an XML tree node of a catalog and build
* a Catalog entry from it.
@@ -1076,7 +1119,8 @@ xmlGetXMLCatalogEntryType(const xmlChar *name) {
static xmlCatalogEntryPtr
xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
const xmlChar *name, const xmlChar *attrName,
- const xmlChar *uriAttrName, xmlCatalogPrefer prefer) {
+ const xmlChar *uriAttrName, xmlCatalogPrefer prefer,
+ xmlCatalogEntryPtr cgroup) {
int ok = 1;
xmlChar *uriValue;
xmlChar *nameValue = NULL;
@@ -1117,7 +1161,7 @@ xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
xmlGenericError(xmlGenericErrorContext,
"Found %s: '%s'\n", name, URL);
}
- ret = xmlNewCatalogEntry(type, nameValue, uriValue, URL, prefer);
+ ret = xmlNewCatalogEntry(type, nameValue, uriValue, URL, prefer, cgroup);
} else {
xmlCatalogErr(ret, cur, XML_CATALOG_ENTRY_BROKEN,
"%s entry '%s' broken ?: %s\n", name, uriAttrName, uriValue);
@@ -1138,6 +1182,7 @@ xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
* @cur: the XML node
* @prefer: the PUBLIC vs. SYSTEM current preference value
* @parent: the parent Catalog entry
+ * @cgroup: the group which includes this node
*
* Examines an XML tree node of a catalog and build
* a Catalog entry from it adding it to its parent. The examination can
@@ -1145,7 +1190,7 @@ xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
*/
static void
xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr parent)
+ xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup)
{
xmlChar *uri = NULL;
xmlChar *URL = NULL;
@@ -1156,6 +1201,7 @@ xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
return;
if (xmlStrEqual(cur->name, BAD_CAST "group")) {
xmlChar *prop;
+ xmlCatalogPrefer pref = XML_CATA_PREFER_NONE;
prop = xmlGetProp(cur, BAD_CAST "prefer");
if (prop != NULL) {
@@ -1169,46 +1215,45 @@ xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
prop, NULL, NULL);
}
xmlFree(prop);
+ pref = prefer;
}
- /*
- * Recurse to propagate prefer to the subtree
- * (xml:base handling is automated)
- */
- xmlParseXMLCatalogNodeList(cur->children, prefer, parent);
+ prop = xmlGetProp(cur, BAD_CAST "id");
+ base = xmlGetNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
+ entry = xmlNewCatalogEntry(XML_CATA_GROUP, prop, base, NULL, pref, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "public")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_PUBLIC,
- BAD_CAST "public", BAD_CAST "publicId", BAD_CAST "uri", prefer);
+ BAD_CAST "public", BAD_CAST "publicId", BAD_CAST "uri", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "system")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_SYSTEM,
- BAD_CAST "system", BAD_CAST "systemId", BAD_CAST "uri", prefer);
+ BAD_CAST "system", BAD_CAST "systemId", BAD_CAST "uri", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "rewriteSystem")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_SYSTEM,
BAD_CAST "rewriteSystem", BAD_CAST "systemIdStartString",
- BAD_CAST "rewritePrefix", prefer);
+ BAD_CAST "rewritePrefix", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "delegatePublic")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_PUBLIC,
BAD_CAST "delegatePublic", BAD_CAST "publicIdStartString",
- BAD_CAST "catalog", prefer);
+ BAD_CAST "catalog", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "delegateSystem")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_SYSTEM,
BAD_CAST "delegateSystem", BAD_CAST "systemIdStartString",
- BAD_CAST "catalog", prefer);
+ BAD_CAST "catalog", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "uri")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_URI,
BAD_CAST "uri", BAD_CAST "name",
- BAD_CAST "uri", prefer);
+ BAD_CAST "uri", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "rewriteURI")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_URI,
BAD_CAST "rewriteURI", BAD_CAST "uriStartString",
- BAD_CAST "rewritePrefix", prefer);
+ BAD_CAST "rewritePrefix", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "delegateURI")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_URI,
BAD_CAST "delegateURI", BAD_CAST "uriStartString",
- BAD_CAST "catalog", prefer);
+ BAD_CAST "catalog", prefer, cgroup);
} else if (xmlStrEqual(cur->name, BAD_CAST "nextCatalog")) {
entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_NEXT_CATALOG,
BAD_CAST "nextCatalog", NULL,
- BAD_CAST "catalog", prefer);
+ BAD_CAST "catalog", prefer, cgroup);
}
if ((entry != NULL) && (parent != NULL)) {
entry->parent = parent;
@@ -1223,6 +1268,13 @@ xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
prev->next = entry;
}
}
+ if (entry->type == XML_CATA_GROUP) {
+ /*
+ * Recurse to propagate prefer to the subtree
+ * (xml:base handling is automated)
+ */
+ xmlParseXMLCatalogNodeList(cur->children, prefer, parent, entry);
+ }
if (base != NULL)
xmlFree(base);
if (uri != NULL)
@@ -1236,6 +1288,7 @@ xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
* @cur: the XML node list of siblings
* @prefer: the PUBLIC vs. SYSTEM current preference value
* @parent: the parent Catalog entry
+ * @cgroup: the group which includes this list
*
* Examines a list of XML sibling nodes of a catalog and build
* a list of Catalog entry from it adding it to the parent.
@@ -1243,11 +1296,11 @@ xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
*/
static void
xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr parent) {
+ xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup) {
while (cur != NULL) {
if ((cur->ns != NULL) && (cur->ns->href != NULL) &&
(xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
- xmlParseXMLCatalogNode(cur, prefer, parent);
+ xmlParseXMLCatalogNode(cur, prefer, parent, cgroup);
}
cur = cur->next;
}
@@ -1292,7 +1345,7 @@ xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) {
(xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
parent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- (const xmlChar *)filename, NULL, prefer);
+ (const xmlChar *)filename, NULL, prefer, NULL);
if (parent == NULL) {
xmlFreeDoc(doc);
return(NULL);
@@ -1312,7 +1365,7 @@ xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) {
xmlFree(prop);
}
cur = cur->children;
- xmlParseXMLCatalogNodeList(cur, prefer, parent);
+ xmlParseXMLCatalogNodeList(cur, prefer, parent, NULL);
} else {
xmlCatalogErr(NULL, (xmlNodePtr) doc, XML_CATALOG_NOT_CATALOG,
"File %s is not an XML Catalog\n",
@@ -1477,10 +1530,10 @@ xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type,
"Adding element %s to catalog\n", type);
if (cur == NULL)
catal->children = xmlNewCatalogEntry(typ, orig, replace,
- NULL, catal->prefer);
+ NULL, catal->prefer, NULL);
else
cur->next = xmlNewCatalogEntry(typ, orig, replace,
- NULL, catal->prefer);
+ NULL, catal->prefer, NULL);
if (doregister) {
cur = xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
if (cur != NULL)
@@ -2398,7 +2451,7 @@ xmlParseSGMLCatalog(xmlCatalogPtr catal, const xmlChar *value,
xmlCatalogEntryPtr entry;
entry = xmlNewCatalogEntry(type, name, filename,
- NULL, XML_CATA_PREFER_NONE);
+ NULL, XML_CATA_PREFER_NONE, NULL);
res = xmlHashAddEntry(catal->sgml, name, entry);
if (res < 0) {
xmlFreeCatalogEntry(entry);
@@ -2411,7 +2464,7 @@ xmlParseSGMLCatalog(xmlCatalogPtr catal, const xmlChar *value,
xmlCatalogEntryPtr entry;
entry = xmlNewCatalogEntry(type, sysid, NULL, NULL,
- XML_CATA_PREFER_NONE);
+ XML_CATA_PREFER_NONE, NULL);
res = xmlHashAddEntry(catal->sgml, sysid, entry);
if (res < 0) {
xmlFreeCatalogEntry(entry);
@@ -2628,7 +2681,7 @@ xmlLoadACatalog(const char *filename)
return(NULL);
}
catal->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- NULL, BAD_CAST filename, xmlCatalogDefaultPrefer);
+ NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL);
}
xmlFree(content);
return (catal);
@@ -2669,7 +2722,7 @@ xmlExpandCatalog(xmlCatalogPtr catal, const char *filename)
} else {
xmlCatalogEntryPtr tmp, cur;
tmp = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- NULL, BAD_CAST filename, xmlCatalogDefaultPrefer);
+ NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL);
cur = catal->xml;
if (cur == NULL) {
@@ -2887,7 +2940,7 @@ xmlACatalogAdd(xmlCatalogPtr catal, const xmlChar * type,
xmlCatalogEntryPtr entry;
entry = xmlNewCatalogEntry(cattype, orig, replace, NULL,
- XML_CATA_PREFER_NONE);
+ XML_CATA_PREFER_NONE, NULL);
if (catal->sgml == NULL)
catal->sgml = xmlHashCreate(10);
res = xmlHashAddEntry(catal->sgml, orig, entry);
@@ -3081,7 +3134,7 @@ xmlInitializeCatalog(void) {
path = (char *) xmlStrndup((const xmlChar *)paths, cur - paths);
if (path != NULL) {
*nextent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- NULL, BAD_CAST path, xmlCatalogDefaultPrefer);
+ NULL, BAD_CAST path, xmlCatalogDefaultPrefer, NULL);
if (*nextent != NULL)
nextent = &((*nextent)->next);
xmlFree(path);
@@ -3328,7 +3381,7 @@ xmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace)
xmlDefaultCatalog = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
xmlCatalogDefaultPrefer);
xmlDefaultCatalog->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- orig, NULL, xmlCatalogDefaultPrefer);
+ orig, NULL, xmlCatalogDefaultPrefer, NULL);
xmlRMutexUnlock(xmlCatalogMutex);
return(0);
@@ -3535,7 +3588,7 @@ xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
"Adding document catalog %s\n", URL);
add = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, URL, NULL,
- xmlCatalogDefaultPrefer);
+ xmlCatalogDefaultPrefer, NULL);
if (add == NULL)
return(catalogs);
diff --git a/parser.c b/parser.c
index 2b8f5edd..fc8e59d2 100644
--- a/parser.c
+++ b/parser.c
@@ -11078,9 +11078,8 @@ xmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen,
*lst = NULL;
}
- if ((doc->dict == NULL) && (ctxt->dict != NULL))
- xmlDictFree(ctxt->dict);
- ctxt->dict = NULL;
+ if (doc->dict != NULL)
+ ctxt->dict = NULL;
xmlFreeParserCtxt(ctxt);
return(ret);
diff --git a/xmlcatalog.c b/xmlcatalog.c
index 4c30d754..0597e888 100644
--- a/xmlcatalog.c
+++ b/xmlcatalog.c
@@ -307,6 +307,7 @@ static void usershell(void) {
* *
************************************************************************/
static void usage(const char *name) {
+ /* split into 2 printf's to avoid overly long string (gcc warning) */
printf("\
Usage : %s [options] catalogfile entities...\n\
\tParse the catalog file and query it for the entities\n\
@@ -314,13 +315,14 @@ Usage : %s [options] catalogfile entities...\n\
\t--shell : run a shell allowing interactive queries\n\
\t--create : create a new catalog\n\
\t--add 'type' 'orig' 'replace' : add an XML entry\n\
-\t--add 'entry' : add an SGML entry\n\
+\t--add 'entry' : add an SGML entry\n", name);
+ printf("\
\t--del 'values' : remove values\n\
\t--noout: avoid dumping the result on stdout\n\
\t used with --add or --del, it saves the catalog changes\n\
\t and with --sgml it automatically updates the super catalog\n\
\t--no-super-update: do not update the SGML super catalog\n\
-\t-v --verbose : provide debug informations\n", name);
+\t-v --verbose : provide debug informations\n");
}
int main(int argc, char **argv) {
int i;
diff --git a/xmlstring.c b/xmlstring.c
index 65385fbe..af4e5c81 100644
--- a/xmlstring.c
+++ b/xmlstring.c
@@ -209,7 +209,7 @@ xmlStrncmp(const xmlChar *str1, const xmlChar *str2, int len) {
if (str1 == NULL) return(-1);
if (str2 == NULL) return(1);
#ifdef __GNUC__
- tmp = strncmp(str1, str2, len);
+ tmp = strncmp((const char *)str1, (const char *)str2, len);
return tmp;
#else
do {