static cache_entry* cache_entry_from_xdr_doc(xmlDocPtr doc, xmlChar const* nsURI, MSXML_VERSION version) { cache_entry* entry = heap_alloc(sizeof(cache_entry)); xmlSchemaParserCtxtPtr spctx; xmlDocPtr new_doc = xmlCopyDoc(doc, 1), xsd_doc = XDR_to_XSD_doc(doc, nsURI); link_datatypes(xsd_doc); entry->type = CacheEntryType_XDR; entry->ref = 0; spctx = xmlSchemaNewDocParserCtxt(xsd_doc); if ((entry->schema = Schema_parse(spctx))) { entry->doc = new_doc; xmldoc_init(entry->schema->doc, version); xmldoc_init(entry->doc, version); xmldoc_add_ref(entry->doc); xmldoc_add_ref(entry->schema->doc); } else { FIXME("failed to parse doc\n"); xmlFreeDoc(new_doc); xmlFreeDoc(xsd_doc); heap_free(entry); entry = NULL; } xmlSchemaFreeParserCtxt(spctx); return entry; }
static cache_entry* cache_entry_from_xsd_doc(xmlDocPtr doc) { cache_entry* entry = heap_alloc(sizeof(cache_entry)); xmlSchemaParserCtxtPtr spctx; xmlDocPtr new_doc = xmlCopyDoc(doc, 1); entry->type = SCHEMA_TYPE_XSD; entry->ref = 0; spctx = xmlSchemaNewDocParserCtxt(new_doc); if ((entry->schema = xmlSchemaParse(spctx))) { xmldoc_init(entry->schema->doc, &CLSID_DOMDocument40); entry->doc = entry->schema->doc; xmldoc_add_ref(entry->doc); } else { FIXME("failed to parse doc\n"); xmlFreeDoc(new_doc); heap_free(entry); entry = NULL; } xmlSchemaFreeParserCtxt(spctx); return entry; }
static cache_entry* cache_entry_from_url(char const* url) { cache_entry* entry = heap_alloc(sizeof(cache_entry)); xmlSchemaParserCtxtPtr spctx = xmlSchemaNewParserCtxt(url); entry->type = SCHEMA_TYPE_XSD; entry->ref = 0; if (spctx) { if((entry->schema = xmlSchemaParse(spctx))) { xmldoc_init(entry->schema->doc, &CLSID_DOMDocument40); entry->doc = entry->schema->doc; xmldoc_add_ref(entry->doc); } else { heap_free(entry); entry = NULL; } xmlSchemaFreeParserCtxt(spctx); } else { FIXME("schema for nsURI %s not found\n", wine_dbgstr_a(url)); heap_free(entry); entry = NULL; } return entry; }
static cache_entry* cache_entry_from_xsd_doc(xmlDocPtr doc, xmlChar const* nsURI, MSXML_VERSION v) { cache_entry* entry = heap_alloc(sizeof(cache_entry)); xmlSchemaParserCtxtPtr spctx; xmlDocPtr new_doc = xmlCopyDoc(doc, 1); link_datatypes(new_doc); /* TODO: if the nsURI is different from the default xmlns or targetNamespace, * do we need to do something special here? */ entry->type = CacheEntryType_XSD; entry->ref = 0; spctx = xmlSchemaNewDocParserCtxt(new_doc); if ((entry->schema = Schema_parse(spctx))) { xmldoc_init(entry->schema->doc, v); entry->doc = entry->schema->doc; xmldoc_add_ref(entry->doc); } else { FIXME("failed to parse doc\n"); xmlFreeDoc(new_doc); heap_free(entry); entry = NULL; } xmlSchemaFreeParserCtxt(spctx); return entry; }
static cache_entry* cache_entry_from_xdr_doc(xmlDocPtr doc) { cache_entry* entry = heap_alloc(sizeof(cache_entry)); xmlDocPtr new_doc = xmlCopyDoc(doc, 1); FIXME("XDR schema support not implemented\n"); entry->type = SCHEMA_TYPE_XDR; entry->ref = 0; entry->schema = NULL; entry->doc = new_doc; xmldoc_init(entry->doc, &CLSID_DOMDocument30); xmldoc_add_ref(entry->doc); return entry; }