more fixes with Kasimier, looks far cleaner :-) Daniel

* xmlschemas.c: more fixes with Kasimier, looks far cleaner :-)
Daniel
diff --git a/xmlschemas.c b/xmlschemas.c
index 1cd9159..32eb79f 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -1001,12 +1001,9 @@
         case XML_SCHEMA_CONTENT_MIXED:
             fprintf(output, "mixed ");
             break;
-	/* Removed, since not used. */
-	/*
         case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
-            fprintf(output, "mixed_or_elems ");
+	/* not used. */
             break;
-	*/
         case XML_SCHEMA_CONTENT_BASIC:
             fprintf(output, "basic ");
             break;
@@ -1084,7 +1081,7 @@
  *									*
  ************************************************************************/
 
-xmlAttrPtr
+static xmlAttrPtr
 xmlSchemaGetPropNode(xmlNodePtr node, const xmlChar *name) 
 {
     xmlAttrPtr prop;
@@ -1804,174 +1801,6 @@
 }
 
 /**
- * xmlSchemaNewItemInternal:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the restriction
- *
- * Createa an schema item
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewItemInternal(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret = NULL;
-
-    if ((ctxt == NULL) || (name == NULL))
-        return (NULL);
-
-#ifdef DEBUG
-    fprintf(stderr, "Creating item %s\n", name);
-#endif
-    ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
-    if (ret == NULL) {
-        xmlSchemaPErrMemory(ctxt, "allocating item", NULL);
-        return (NULL);
-    }
-    memset(ret, 0, sizeof(xmlSchemaType));   
-    ret->name = xmlDictLookup(ctxt->dict, name, -1);
-    ret->minOccurs = 1;
-    ret->maxOccurs = 1;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewRestriction:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the restriction
- *
- * Create a <restriction> item 
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewRestriction(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret;
-
-    ret = xmlSchemaNewItemInternal(ctxt, name);
-    if (ret != NULL) 
-	ret->type = XML_SCHEMA_TYPE_RESTRICTION;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewExtension:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the extension
- *
- * Create an <extension> item 
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewExtension(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret;
-
-    ret = xmlSchemaNewItemInternal(ctxt, name);
-    if (ret != NULL) 
-	ret->type = XML_SCHEMA_TYPE_EXTENSION;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewSimpleContent:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the simpleContent
- *
- * Create a <simpleContent> item 
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewSimpleContent(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret;
-
-    ret = xmlSchemaNewItemInternal(ctxt, name);
-    if (ret != NULL) 
-	ret->type = XML_SCHEMA_TYPE_SIMPLE_CONTENT;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewComplexContent:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the complexContent
- *
- * Create a <complexContent> item 
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewComplexContent(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret;
-
-    ret = xmlSchemaNewItemInternal(ctxt, name);
-    if (ret != NULL) 
-	ret->type = XML_SCHEMA_TYPE_COMPLEX_CONTENT;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewUnion:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the union
- *
- * Create an <union> item
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewUnion(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret;
-
-    ret = xmlSchemaNewItemInternal(ctxt, name);
-    if (ret != NULL) 
-	ret->type = XML_SCHEMA_TYPE_UNION;
-
-    return (ret);
-}
-
-/**
- * xmlSchemaNewList:
- * @ctxt:  the schema parser context
- * @name:  the internal name of the union
- *
- * Create an <union> item
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new structure or NULL in case of an error.
- */
-static xmlSchemaTypePtr
-xmlSchemaNewList(xmlSchemaParserCtxtPtr ctxt,
-                 const xmlChar * name)
-{
-    xmlSchemaTypePtr ret;
-
-    ret = xmlSchemaNewItemInternal(ctxt, name);
-    if (ret != NULL) 
-	ret->type = XML_SCHEMA_TYPE_LIST;
-
-    return (ret);
-}
-
-/**
  * xmlSchemaAddGroup:
  * @ctxt:  a schema validation context
  * @schema:  the schema being built
@@ -2258,8 +2087,7 @@
 static xmlSchemaTypePtr xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr
                                                   ctxt,
                                                   xmlSchemaPtr schema,
-                                                  xmlNodePtr node,
-                                                  int simple);
+                                                  xmlNodePtr node);
 static xmlSchemaTypePtr xmlSchemaParseSequence(xmlSchemaParserCtxtPtr ctxt,
                                                xmlSchemaPtr schema,
                                                xmlNodePtr node);
@@ -2318,7 +2146,6 @@
 	case XML_SCHEMAS_QNAME:
 	    ret = xmlValidateQName(value, 1);
 	    if ((ret == 0) && (attr != NULL)) {
-		xmlChar *uri = NULL;
                 xmlChar *local = NULL;
 		xmlChar *prefix;
 		
@@ -3400,7 +3227,7 @@
     /*
     * Check type of "itemType". 
     */
-    attr = xmlSchemaGetPropNode(node, "itemType");
+    attr = xmlSchemaGetPropNode(node, BAD_CAST "itemType");
     if (attr != NULL) {
 	type->base = xmlGetQNameProp(ctxt, node, "itemType", &(type->baseNs));
 	xmlSchemaParseSchemaAttrValue(ctxt, attr, 
@@ -3536,7 +3363,7 @@
     ctxt->parentItem = type;
     if (IS_SCHEMA(child, "restriction")) {
         subtype = (xmlSchemaTypePtr)
-            xmlSchemaParseRestriction(ctxt, schema, child, 1);
+            xmlSchemaParseRestriction(ctxt, schema, child);
         child = child->next;
     } else if (IS_SCHEMA(child, "list")) {
         subtype = (xmlSchemaTypePtr)
@@ -4431,7 +4258,6 @@
  * @ctxt:  a schema validation context
  * @schema:  the schema being built
  * @node:  a subtree containing XML Schema informations
- * @simple:  is that part of a simple type.
  *
  * parse a XML schema Restriction definition
  * *WARNING* this interface is highly subject to change
@@ -4440,7 +4266,7 @@
  */
 static xmlSchemaTypePtr
 xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
-                          xmlNodePtr node, int simple)
+                          xmlNodePtr node)
 {
     xmlSchemaTypePtr type, subtype;    
     xmlNodePtr child = NULL;
@@ -4692,7 +4518,7 @@
     subtype = NULL;    
     if (IS_SCHEMA(child, "restriction")) {
         subtype = (xmlSchemaTypePtr)
-            xmlSchemaParseRestriction(ctxt, schema, child, 0);
+            xmlSchemaParseRestriction(ctxt, schema, child);
         child = child->next;
     } else if (IS_SCHEMA(child, "extension")) {
         subtype = (xmlSchemaTypePtr)
@@ -4748,7 +4574,7 @@
     subtype = NULL;
     if (IS_SCHEMA(child, "restriction")) {
         subtype = (xmlSchemaTypePtr)
-            xmlSchemaParseRestriction(ctxt, schema, child, 0);
+            xmlSchemaParseRestriction(ctxt, schema, child);
         child = child->next;
     } else if (IS_SCHEMA(child, "extension")) {
         subtype = (xmlSchemaTypePtr)
@@ -6720,183 +6546,157 @@
 		      type->name, NULL);
         return (-1);
     }
-    if ((type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION) || 
-	(type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION)) {	
-		
-	baseType = type->baseType;
-	if (baseType == NULL) {
-	    xmlSchemaPErr(ctxt, type->node, XML_SCHEMAS_ERR_INTERNAL,
-		"Internal error: xmlSchemaBuildAttributeValidation: "
-		"type has no base type.\n",
-		NULL, NULL);
-	    return (-1);
-	}
 
-	if (baseType == anyType)
-	    baseIsAnyType = 1;
-	/*
-	 * Inherit the attribute uses of the base type.
-	 */
-	/*
-	 * NOTE: It is allowed to "extend" the anyType complex type.
-	 */
-	if (!baseIsAnyType) {
-	    if (baseType != NULL) {
-		for (cur = baseType->attributeUses; cur != NULL; cur = cur->next) {
-		    tmp = (xmlSchemaAttributeLinkPtr) 
-			xmlMalloc(sizeof(xmlSchemaAttributeLink));
-		    if (tmp == NULL) {
-			xmlSchemaPErrMemory(ctxt, 
-			    "building attribute uses of complexType", NULL);
-			return (-1);
-		    }
-		    tmp->attr = cur->attr;
-		    tmp->next = NULL;
-		    if (type->attributeUses == NULL) {
-			type->attributeUses = tmp;
-		    } else 
-			lastBaseUse->next = tmp;
-		    lastBaseUse = tmp; 
+    baseType = type->baseType;
+    if (baseType == NULL) {
+	xmlSchemaPErr(ctxt, type->node, XML_SCHEMAS_ERR_INTERNAL,
+	    "Internal error: xmlSchemaBuildAttributeValidation: "
+	    "type has no base type.\n",
+	    NULL, NULL);
+	return (-1);
+    }
+
+    if (baseType == anyType)
+	baseIsAnyType = 1;
+    /*
+     * Inherit the attribute uses of the base type.
+     */
+    /*
+     * NOTE: It is allowed to "extend" the anyType complex type.
+     */
+    if (!baseIsAnyType) {
+	if (baseType != NULL) {
+	    for (cur = baseType->attributeUses; cur != NULL; cur = cur->next) {
+		tmp = (xmlSchemaAttributeLinkPtr) 
+		    xmlMalloc(sizeof(xmlSchemaAttributeLink));
+		if (tmp == NULL) {
+		    xmlSchemaPErrMemory(ctxt, 
+			"building attribute uses of complexType", NULL);
+		    return (-1);
 		}
+		tmp->attr = cur->attr;
+		tmp->next = NULL;
+		if (type->attributeUses == NULL) {
+		    type->attributeUses = tmp;
+		} else 
+		    lastBaseUse->next = tmp;
+		lastBaseUse = tmp; 
 	    }
 	}
-	if ((type->subtypes != NULL) && 
-	    ((type->subtypes->type == XML_SCHEMA_TYPE_COMPLEX_CONTENT) || 
-	     (type->subtypes->type == XML_SCHEMA_TYPE_SIMPLE_CONTENT))) {
-	    attrs = type->subtypes->subtypes->attributes;
-	    type->attributeWildcard = type->subtypes->subtypes->attributeWildcard;
-	} else {
-	    /* Short hand form of the complexType. */
-	    attrs = type->attributes;
-	}
-	/*
-	* Handle attribute wildcards.
-	*/	
-	if (xmlSchemaBuildCompleteAttributeWildcard(ctxt, 
-	    attrs, &type->attributeWildcard) == -1) {	    
-	    if ((type->attributeWildcard != NULL) &&
-		/* Either we used the short hand form... */
-		((type->subtypes == NULL) ||
-		/* Or complexType -> restriction/extension */
-		(type->attributeWildcard != type->subtypes->subtypes->attributeWildcard)))
-		type->flags |= XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
-	    return (-1);
-	}
-	/*
-	* TODO: This "onwed_attr_wildcard" is quite sensless: we should
-	* create the wildcard right from the start on the complexType,
-	* rather than on the <restriction>/<extension>.
-	*/
+    }
+    if ((type->subtypes != NULL) && 
+	((type->subtypes->type == XML_SCHEMA_TYPE_COMPLEX_CONTENT) || 
+	 (type->subtypes->type == XML_SCHEMA_TYPE_SIMPLE_CONTENT))) {
+	attrs = type->subtypes->subtypes->attributes;
+	type->attributeWildcard = type->subtypes->subtypes->attributeWildcard;
+    } else {
+	/* Short hand form of the complexType. */
+	attrs = type->attributes;
+    }
+    /*
+    * Handle attribute wildcards.
+    */	
+    if (xmlSchemaBuildCompleteAttributeWildcard(ctxt, 
+	attrs, &type->attributeWildcard) == -1) {	    
 	if ((type->attributeWildcard != NULL) &&
 	    /* Either we used the short hand form... */
 	    ((type->subtypes == NULL) ||
 	    /* Or complexType -> restriction/extension */
 	    (type->attributeWildcard != type->subtypes->subtypes->attributeWildcard)))
 	    type->flags |= XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
-
-	if ((type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION) && 
-	    ((baseIsAnyType) ||
-	     ((baseType != NULL) && 	    
-	      (baseType->type == XML_SCHEMA_TYPE_COMPLEX) &&	      
-	      (baseType->attributeWildcard != NULL)))) {	    
-	    if (type->attributeWildcard != NULL) {
-		/*
-		* Union the complete wildcard with the base wildcard.
-		*/
-		if (xmlSchemaUnionWildcards(ctxt, type->attributeWildcard, 
-		    baseType->attributeWildcard) == -1)
-		    return (-1);
-	    } else {
-		/*
-		* Just inherit the wildcard.
-		*/
-		type->attributeWildcard = baseType->attributeWildcard;
-	    }
-	}
-	
-	if (type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION) {
-	    if (type->attributeWildcard != NULL) {
-		/* 
-		* Derivation Valid (Restriction, Complex) 	    
-		* 4.1 The {base type definition} must also have one. 
-		*/
-		if (baseType->attributeWildcard == NULL) {	    
-		    xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1,
-			"The derived type \"%s\" has an attribute wildcard, "
-			"but the base type \"%s\" does not have one.\n",
-			type->name, baseType->name);
-		    return (1);
-		} else if (xmlSchemaIsWildcardNsConstraintSubset(ctxt, 
-		    type->attributeWildcard, baseType->attributeWildcard) == 0) {
-		    /* 4.2 */
-		    xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2,
-			"The wildcard in the derived type \"%s\" is not a valid " 
-			"subset of the one in the base type \"%s\".\n",
-			type->name, baseType->name);	    
-		    return (1);
-		}
-		/* 4.3 Unless the {base type definition} is the ·ur-type 
-		* definition·, the complex type definition's {attribute 
-		* wildcard}'s {process contents} must be identical to or 
-		* stronger than the {base type definition}'s {attribute 
-		* wildcard}'s {process contents}, where strict is stronger 
-		* than lax is stronger than skip.
-		*/
-		if ((type->baseType != anyType) && 
-		    (type->attributeWildcard->processContents < 
-		    baseType->attributeWildcard->processContents)) {
-		    xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3,
-			"The process contents of the wildcard in the "
-			"derived type \"%s\" is weaker than " 
-			"that in the base type \"%s\".\n",
-			type->name, baseType->name);
-		    return (1);
-		}
-	    }
-	} else if (type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION) {
-	    /*
-	    * Derivation Valid (Extension)
-	    * At this point the type and the base have both, either
-	    * no wildcard or a wildcard.
-	    */
-	    if ((baseType->attributeWildcard != NULL) &&
-		(baseType->attributeWildcard != type->attributeWildcard)) {
-		/* 1.3 */
-		if (xmlSchemaIsWildcardNsConstraintSubset(ctxt, 
-		    baseType->attributeWildcard, type->attributeWildcard) == 0) {
-		    xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_COS_CT_EXTENDS_1_3,
-			"The wildcard in the derived type \"%s\" is not a valid " 
-			"superset of the one in the base type \"%s\".\n",
-			type->name, baseType->name);
-		    return (1);		
-		}
-	    }		
-	}	
-    } 
+	return (-1);
+    }
     /*
-    * Removed, since anyType was plugged into the derivation hierarchy.
+    * TODO: This "onwed_attr_wildcard" is quite sensless: we should
+    * create the wildcard right from the start on the complexType,
+    * rather than on the <restriction>/<extension>.
     */
-    /*
-    else {
-	*
-	 * Although the complexType is implicitely derived by "restriction"
-	 * from the ur-type, this is not (yet?) reflected by libxml2.
-	 *
-	baseType = NULL;
-	attrs = type->attributes;
-	if (attrs != NULL) {
-	    if (xmlSchemaBuildCompleteAttributeWildcard(ctxt, 
-		attrs, &type->attributeWildcard) == -1) {
-		if ((type->attributeWildcard != NULL) &&
-		    (type->attributeWildcard != type->subtypes->subtypes->attributeWildcard))
-		    type->flags |= XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
-		return (-1);	    
-	    }
-	    if ((type->attributeWildcard != NULL) &&
-		((type->flags & XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD) == 0))
-		type->flags |= XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
+    if ((type->attributeWildcard != NULL) &&
+	/* Either we used the short hand form... */
+	((type->subtypes == NULL) ||
+	/* Or complexType -> restriction/extension */
+	(type->attributeWildcard != type->subtypes->subtypes->attributeWildcard)))
+	type->flags |= XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
+
+    if ((type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION) && 
+	((baseIsAnyType) ||
+	 ((baseType != NULL) && 	    
+	  (baseType->type == XML_SCHEMA_TYPE_COMPLEX) &&	      
+	  (baseType->attributeWildcard != NULL)))) {	    
+	if (type->attributeWildcard != NULL) {
+	    /*
+	    * Union the complete wildcard with the base wildcard.
+	    */
+	    if (xmlSchemaUnionWildcards(ctxt, type->attributeWildcard, 
+		baseType->attributeWildcard) == -1)
+		return (-1);
+	} else {
+	    /*
+	    * Just inherit the wildcard.
+	    */
+	    type->attributeWildcard = baseType->attributeWildcard;
 	}
-    } */
+    }
+    
+    if (type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION) {
+	if (type->attributeWildcard != NULL) {
+	    /* 
+	    * Derivation Valid (Restriction, Complex) 	    
+	    * 4.1 The {base type definition} must also have one. 
+	    */
+	    if (baseType->attributeWildcard == NULL) {	    
+		xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1,
+		    "The derived type \"%s\" has an attribute wildcard, "
+		    "but the base type \"%s\" does not have one.\n",
+		    type->name, baseType->name);
+		return (1);
+	    } else if (xmlSchemaIsWildcardNsConstraintSubset(ctxt, 
+		type->attributeWildcard, baseType->attributeWildcard) == 0) {
+		/* 4.2 */
+		xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2,
+		    "The wildcard in the derived type \"%s\" is not a valid " 
+		    "subset of the one in the base type \"%s\".\n",
+		    type->name, baseType->name);	    
+		return (1);
+	    }
+	    /* 4.3 Unless the {base type definition} is the ·ur-type 
+	    * definition·, the complex type definition's {attribute 
+	    * wildcard}'s {process contents} must be identical to or 
+	    * stronger than the {base type definition}'s {attribute 
+	    * wildcard}'s {process contents}, where strict is stronger 
+	    * than lax is stronger than skip.
+	    */
+	    if ((type->baseType != anyType) && 
+		(type->attributeWildcard->processContents < 
+		baseType->attributeWildcard->processContents)) {
+		xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3,
+		    "The process contents of the wildcard in the "
+		    "derived type \"%s\" is weaker than " 
+		    "that in the base type \"%s\".\n",
+		    type->name, baseType->name);
+		return (1);
+	    }
+	}
+    } else if (type->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION) {
+	/*
+	* Derivation Valid (Extension)
+	* At this point the type and the base have both, either
+	* no wildcard or a wildcard.
+	*/
+	if ((baseType->attributeWildcard != NULL) &&
+	    (baseType->attributeWildcard != type->attributeWildcard)) {
+	    /* 1.3 */
+	    if (xmlSchemaIsWildcardNsConstraintSubset(ctxt, 
+		baseType->attributeWildcard, type->attributeWildcard) == 0) {
+		xmlSchemaPErr(ctxt, type->node, XML_SCHEMAP_COS_CT_EXTENDS_1_3,
+		    "The wildcard in the derived type \"%s\" is not a valid " 
+		    "superset of the one in the base type \"%s\".\n",
+		    type->name, baseType->name);
+		return (1);		
+	    }
+	}		
+    }	
+
     /*
      * Gather attribute uses defined by this type.
      */
@@ -7183,7 +6983,7 @@
  * Returns a list of member types of @type if existing, 
  * returns NULL otherwise.
  */
-xmlSchemaTypeLinkPtr
+static xmlSchemaTypeLinkPtr
 xmlSchemaGetUnionSimpleTypeMemberTypes(xmlSchemaTypePtr type)
 {
     while (type != NULL) {
@@ -7505,7 +7305,7 @@
 			"is not allowed on primitive type \"%s\".\n",
 			type->name, 
 			xmlSchemaFacetTypeToString(facet->type),
-			primitive->name, NULL, NULL);
+			BAD_CAST primitive->name, NULL, NULL);
 		    
 		    ok = 0;			    
 		}
@@ -7594,7 +7394,8 @@
 			    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2,
 			    "List simple type \"%s\": the facet \"%s\" "
 			    "is not allowed.\n", 
-			    type->name, xmlSchemaFacetTypeToString(facet->type));
+			    type->name,
+			    BAD_CAST xmlSchemaFacetTypeToString(facet->type));
 			return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2);
 		    }
 		    facet = facet->next;
@@ -7696,7 +7497,7 @@
 				"List simple type \"%s\": the facet \"%s\" "
 				"is not allowed.\n",
 				type->name, 
-				xmlSchemaFacetTypeToString(facet->type));
+				BAD_CAST xmlSchemaFacetTypeToString(facet->type));
 			    /*
 			    * We could return, but it's nicer to report all 
 			    * invalid facets.
@@ -7876,7 +7677,7 @@
 			    "Union simple type \"%s\": the facet \"%s\" "
 			    "is not allowed.\n",
 			    type->name, 
-			    xmlSchemaFacetTypeToString(facet->type));
+			    BAD_CAST xmlSchemaFacetTypeToString(facet->type));
 			ok = 0;			    
 		    }		    
 		    facet = facet->next;
@@ -8060,6 +7861,8 @@
 	    case XML_SCHEMA_TYPE_RESTRICTION:
 	    case XML_SCHEMA_TYPE_EXTENSION:	    
 		return;
+	    default:
+	        break;
 	}
     }
     if (name == NULL)
@@ -8611,7 +8414,7 @@
 			    "Type \"%s\": the value \"%s\" of the "
 			    "facet \"%s\" is invalid.\n",
 			    name, facet->value, 
-			    xmlSchemaFacetTypeToString(facet->type), 
+			    BAD_CAST xmlSchemaFacetTypeToString(facet->type), 
 			    NULL, NULL);
                     }
                     ret = -1;
@@ -8694,7 +8497,7 @@
 			    "Type \"%s\": the value \"%s\" of the "
 			    "facet \"%s\" is invalid.\n",
 			    name, facet->value, 
-			    xmlSchemaFacetTypeToString(facet->type),
+			    BAD_CAST xmlSchemaFacetTypeToString(facet->type),
 			    NULL, NULL);
                     }
                     ret = -1;
@@ -9120,27 +8923,6 @@
     return (ret);
 }
 
-/**
- * xmlSchemaValidateFacets:
- * @ctxt:  a schema validation context
- * @base:  the base type
- * @facets:  the list of facets to check
- * @value:  the lexical repr of the value to validate
- * @val:  the precomputed value
- *
- * Check a value against all facet conditions
- *
- * Returns 0 if the element is schemas valid, a positive error code
- *     number otherwise and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateFacets(xmlSchemaValidCtxtPtr ctxt,
-                        xmlSchemaTypePtr base,
-                        xmlSchemaFacetLinkPtr facets, const xmlChar * value)
-{
-    return(xmlSchemaValidateFacetsInternal(ctxt, base, facets, value, 1));
-}
-
 /************************************************************************
  * 									*
  * 			Simple type validation				*
@@ -9577,35 +9359,6 @@
 }
 
 /**
- * xmlSchemaSkipIgnored:
- * @ctxt:  a schema validation context
- * @type:  the current type context
- * @node:  the top node.
- *
- * Skip ignorable nodes in that context
- *
- * Returns the new sibling
- *     number otherwise and -1 in case of internal or API error.
- */
-static xmlNodePtr
-xmlSchemaSkipIgnored(xmlSchemaValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
-                     xmlSchemaTypePtr type, xmlNodePtr node)
-{
-    /*
-     * TODO complete and handle entities
-     */
-    while ((node != NULL) &&
-           ((node->type == XML_COMMENT_NODE) ||
-            ((type->contentType == XML_SCHEMA_CONTENT_MIXED) && 
-	    (node->type == XML_TEXT_NODE)) ||
-            (((type->contentType == XML_SCHEMA_CONTENT_ELEMENTS) &&
-              (node->type == XML_TEXT_NODE) && (IS_BLANK_NODE(node)))))) {
-        node = node->next;
-    }
-    return (node);
-}
-
-/**
  * xmlSchemaValidateCallback:
  * @ctxt:  a schema validation context
  * @name:  the name of the element detected (might be NULL)
@@ -10013,7 +9766,8 @@
 		type->name, NULL);
 	} else if ((ret == 0) && (applyFacets) && 
 	    (type->facetSet != NULL)) {
-	    int expLen, okFacet = 0, hasFacet = 0;
+	    int okFacet = 0, hasFacet = 0;
+	    unsigned long expLen;
 	    xmlSchemaFacetPtr facet;
 	    xmlSchemaFacetLinkPtr facetLink;
 	    xmlChar *collapsedValue = NULL;
@@ -10045,7 +9799,7 @@
 			* length value?
 			*/
 			snprintf(l, 24, "%d", len);
-			snprintf(fl, 24, "%d", expLen);
+			snprintf(fl, 24, "%lu", expLen);
 			if (ret == XML_SCHEMAV_CVC_LENGTH_VALID) {
 			    xmlSchemaVErr(ctxt, ctxt->cur, ret,
 				"The value with length \"%s\" is not "