added code to handle <group>, including dumping to output (bug 151924).

* 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)
diff --git a/catalog.c b/catalog.c
index 5dcc928..908dda5 100644
--- a/catalog.c
+++ b/catalog.c
@@ -90,6 +90,7 @@
     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 @@
     xmlCatalogPrefer prefer;
     int dealloc;
     int depth;
+    struct _xmlCatalogEntry *group;
 };
 
 typedef enum {
@@ -245,6 +247,7 @@
  * @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 @@
  */
 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 @@
     ret->prefer = prefer;
     ret->dealloc = 0;
     ret->depth = 0;
+    ret->group = group;
     return(ret);
 }
 
@@ -504,15 +509,137 @@
     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 @@
     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 @@
 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 @@
  * @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 @@
 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 @@
 		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 @@
  * @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 @@
  */
 static void
 xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
-	               xmlCatalogEntryPtr parent)
+	               xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup)
 {
     xmlChar *uri = NULL;
     xmlChar *URL = NULL;
@@ -1156,6 +1201,7 @@
         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 @@
 			      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 @@
 	    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 @@
  * @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 @@
  */
 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 @@
 	(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 @@
 	    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 @@
 		"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 @@
 		    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 @@
 		    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 @@
 	    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 @@
     } 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 @@
             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 @@
 		    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 @@
 	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 @@
 		"Adding document catalog %s\n", URL);
 
     add = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, URL, NULL,
-	                     xmlCatalogDefaultPrefer);
+	                     xmlCatalogDefaultPrefer, NULL);
     if (add == NULL)
 	return(catalogs);