[2/6] msxml3: IXMLDOMSchemaCollection/XMLSchemaCache backend
Nikolay Sivov
bunglehead at gmail.com
Sat Oct 16 04:05:55 CDT 2010
On 10/15/2010 18:25, Adam Martinson wrote:
>
> Implemented on top of libxml's hash table.
> ---
> dlls/msxml3/schema.c | 376
> +++++++++++++++++++++++++++++++++++++++++++-------
> 1 files changed, 326 insertions(+), 50 deletions(-)
> +static LONG cache_entry_release(cache_entry* entry)
> {
> - schema_t *This = impl_from_IXMLDOMSchemaCollection( iface );
> + LONG ref = InterlockedDecrement(&entry->ref);
> + TRACE("%p new ref %d\n", entry, ref);
>
> - TRACE("(%p)->(%s %p)\n", This, debugstr_guid( riid ), ppvObject );
> + if (ref == 0)
> + {
> + if (entry->type == SCHEMA_TYPE_XSD)
> + {
> + xmldoc_release(entry->doc);
> + entry->schema->doc = NULL;
> + xmlSchemaFree(entry->schema);
> + heap_free(entry);
> + }
> + else /* SCHEMA_TYPE_XDR */
> + {
> + xmldoc_release(entry->doc);
> + heap_free(entry);
> + }
> + }
> + return ref;
> +}
Looks a but redundant. xmldoc_release() and heap_free(entry) are always
used, so only xmlSchemaFree() and doc reset before it should be under
condition.
> + xmlNodePtr root;
> + if (schema)
> + root = xmlDocGetRootElement(schema);
> + if (root&& root->ns)
> + {
root uninitialized? If this never happens practically then remove if
(schema) condition.
> - IXMLDOMSchemaCollection_AddRef( iface );
> + IXMLDOMSchemaCollection_AddRef(iface);
>
> return S_OK;
> }
>
> -static ULONG WINAPI schema_cache_AddRef( IXMLDOMSchemaCollection *iface )
> +static ULONG WINAPI schema_cache_AddRef(IXMLDOMSchemaCollection *iface)
No need for such changes here and later in this patch, even some new
added lines use white-spaces in such cases.
> + IXMLDOMNode* domnode = NULL;
> + IDispatch_QueryInterface(V_DISPATCH(&var),&IID_IXMLDOMNode, (void**)&domnode);
> +
> + if (domnode)
> + doc = xmlNodePtr_from_domnode(domnode, XML_DOCUMENT_NODE)->doc;
Not sure about that, I'd say it's better to test for hr == S_OK and
return value from QueryInterface, is this branch tested?
More information about the wine-devel
mailing list