msxml3: Accept VT_UNKNOWN input for IXMLDOMSchemaCollection::add().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
aaac0db600
commit
d241788d28
|
@ -1226,12 +1226,13 @@ static HRESULT WINAPI schema_cache_add(IXMLDOMSchemaCollection2* iface, BSTR uri
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VT_DISPATCH:
|
case VT_DISPATCH:
|
||||||
|
case VT_UNKNOWN:
|
||||||
{
|
{
|
||||||
xmlDocPtr doc = NULL;
|
xmlDocPtr doc = NULL;
|
||||||
cache_entry* entry;
|
cache_entry* entry;
|
||||||
CacheEntryType type;
|
CacheEntryType type;
|
||||||
IXMLDOMNode* domnode = NULL;
|
IXMLDOMNode* domnode = NULL;
|
||||||
IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IXMLDOMNode, (void**)&domnode);
|
IUnknown_QueryInterface(V_UNKNOWN(&var), &IID_IXMLDOMNode, (void**)&domnode);
|
||||||
|
|
||||||
if (domnode)
|
if (domnode)
|
||||||
doc = xmlNodePtr_from_domnode(domnode, XML_DOCUMENT_NODE)->doc;
|
doc = xmlNodePtr_from_domnode(domnode, XML_DOCUMENT_NODE)->doc;
|
||||||
|
@ -1275,10 +1276,9 @@ static HRESULT WINAPI schema_cache_add(IXMLDOMSchemaCollection2* iface, BSTR uri
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
FIXME("arg type is not supported, %s\n", debugstr_variant(&var));
|
||||||
heap_free(name);
|
heap_free(name);
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
heap_free(name);
|
heap_free(name);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -506,6 +506,7 @@ static void test_schema_refs(void)
|
||||||
VARIANT_BOOL b;
|
VARIANT_BOOL b;
|
||||||
BSTR str;
|
BSTR str;
|
||||||
LONG len;
|
LONG len;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
doc = create_document(&IID_IXMLDOMDocument2);
|
doc = create_document(&IID_IXMLDOMDocument2);
|
||||||
if (!doc)
|
if (!doc)
|
||||||
|
@ -557,6 +558,24 @@ static void test_schema_refs(void)
|
||||||
ole_check(IXMLDOMSchemaCollection_get_length(cache, &len));
|
ole_check(IXMLDOMSchemaCollection_get_length(cache, &len));
|
||||||
ok(len == 0, "got %d\n", len);
|
ok(len == 0, "got %d\n", len);
|
||||||
|
|
||||||
|
/* same, but with VT_UNKNOWN type */
|
||||||
|
V_VT(&v) = VT_UNKNOWN;
|
||||||
|
V_UNKNOWN(&v) = (IUnknown*)doc;
|
||||||
|
hr = IXMLDOMSchemaCollection_add(cache, NULL, v);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
len = -1;
|
||||||
|
hr = IXMLDOMSchemaCollection_get_length(cache, &len);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(len == 1, "got %d\n", len);
|
||||||
|
|
||||||
|
hr = IXMLDOMSchemaCollection_remove(cache, NULL);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
len = -1;
|
||||||
|
hr = IXMLDOMSchemaCollection_get_length(cache, &len);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(len == 0, "got %d\n", len);
|
||||||
|
|
||||||
str = SysAllocString(xdr_schema_uri);
|
str = SysAllocString(xdr_schema_uri);
|
||||||
ole_check(IXMLDOMSchemaCollection_add(cache, str, _variantdoc_(doc)));
|
ole_check(IXMLDOMSchemaCollection_add(cache, str, _variantdoc_(doc)));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue