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