msxml: implement save

Huw D M Davies h.davies1 at physics.ox.ac.uk
Tue Jan 24 05:58:43 CST 2006


        Huw Davies <huw at codeweavers.com>
        msxml: implement save
-- 
Huw Davies
huw at codeweavers.com
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 388f2db..5b27b28 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -929,8 +929,40 @@ static HRESULT WINAPI domdoc_save(
     IXMLDOMDocument *iface,
     VARIANT destination )
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    domdoc *This = impl_from_IXMLDOMDocument( iface );
+    HANDLE handle;
+    xmlChar *mem;
+    int size;
+    HRESULT ret = S_OK;
+    DWORD written;
+
+    TRACE("(%p)->(var(vt %x, %s))\n", This, V_VT(&destination),
+          V_VT(&destination) == VT_BSTR ? debugstr_w(V_BSTR(&destination)) : NULL);
+
+    if(V_VT(&destination) != VT_BSTR)
+    {
+        FIXME("Unhandled vt %x\n", V_VT(&destination));
+        return S_FALSE;
+    }
+
+    handle = CreateFileW( V_BSTR(&destination), GENERIC_WRITE, 0,
+                          NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
+    if( handle == INVALID_HANDLE_VALUE )
+    {
+        WARN("failed to create file\n");
+        return S_FALSE;
+    }
+
+    xmlDocDumpMemory(get_doc(This), &mem, &size);
+    if(!WriteFile(handle, mem, (DWORD)size, &written, NULL) || written != (DWORD)size)
+    {
+        WARN("write error\n");
+        ret = S_FALSE;
+    }
+
+    xmlFree(mem);
+    CloseHandle(handle);
+    return ret;
 }
 
 static HRESULT WINAPI domdoc_get_validateOnParse(



More information about the wine-patches mailing list