Piotr Caban : msxml3: Split DOMDocument_create.
Alexandre Julliard
julliard at winehq.org
Wed Jul 9 06:10:26 CDT 2008
Module: wine
Branch: master
Commit: 7f84185aa472a185675a6a166e99245bf43e4a64
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7f84185aa472a185675a6a166e99245bf43e4a64
Author: Piotr Caban <piotr.caban at gmail.com>
Date: Tue Jul 8 20:55:47 2008 +0200
msxml3: Split DOMDocument_create.
---
dlls/msxml3/domdoc.c | 39 +++++++++++++++++++++++----------------
dlls/msxml3/msxml_private.h | 2 ++
2 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index f48669b..2b6b768 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -2200,13 +2200,10 @@ static const IObjectSafetyVtbl domdocObjectSafetyVtbl = {
xmldoc_Safety_SetInterfaceSafetyOptions
};
-HRESULT DOMDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
+HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **document)
{
domdoc *doc;
HRESULT hr;
- xmlDocPtr xmldoc;
-
- TRACE("(%p,%p)\n", pUnkOuter, ppObj);
doc = HeapAlloc( GetProcessHeap(), 0, sizeof (*doc) );
if( !doc )
@@ -2229,19 +2226,9 @@ HRESULT DOMDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
doc->safeopt = 0;
doc->bsc = NULL;
- xmldoc = xmlNewDoc(NULL);
- if(!xmldoc)
- {
- HeapFree(GetProcessHeap(), 0, doc);
- return E_OUTOFMEMORY;
- }
-
- xmldoc->_private = 0;
-
doc->node_unk = create_basic_node( (xmlNodePtr)xmldoc, (IUnknown*)&doc->lpVtbl );
if(!doc->node_unk)
{
- xmlFreeDoc(xmldoc);
HeapFree(GetProcessHeap(), 0, doc);
return E_FAIL;
}
@@ -2256,12 +2243,32 @@ HRESULT DOMDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
/* The ref on doc->node is actually looped back into this object, so release it */
IXMLDOMNode_Release(doc->node);
- *ppObj = &doc->lpVtbl;
+ *document = (IXMLDOMDocument2*)&doc->lpVtbl;
- TRACE("returning iface %p\n", *ppObj);
+ TRACE("returning iface %p\n", *document);
return S_OK;
}
+HRESULT DOMDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
+{
+ xmlDocPtr xmldoc;
+ HRESULT hr;
+
+ TRACE("(%p,%p)\n", pUnkOuter, ppObj);
+
+ xmldoc = xmlNewDoc(NULL);
+ if(!xmldoc)
+ return E_OUTOFMEMORY;
+
+ xmldoc->_private = 0;
+
+ hr = DOMDocument_create_from_xmldoc(xmldoc, (IXMLDOMDocument2**)ppObj);
+ if(FAILED(hr))
+ xmlFreeDoc(xmldoc);
+
+ return hr;
+}
+
#else
HRESULT DOMDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index f6932d1..f0c6093 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -91,6 +91,8 @@ extern HRESULT SchemaCache_create( IUnknown *pUnkOuter, LPVOID *ppObj );
extern HRESULT XMLDocument_create( IUnknown *pUnkOuter, LPVOID *ppObj );
extern HRESULT SAXXMLReader_create(IUnknown *pUnkOuter, LPVOID *ppObj );
+extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **document);
+
/* typelibs */
enum tid_t {
IXMLDOMAttribute_tid,
More information about the wine-cvs
mailing list