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