From 727970e242acdee2984918eb1dbdacf2815e6d54 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Tue, 24 Jan 2006 14:43:18 +0100 Subject: [PATCH] msxml: Implement save. --- dlls/msxml3/domdoc.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index 388f2db8881..5b27b286fd9 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( -- 2.11.4.GIT