Module: wine Branch: refs/heads/master Commit: 727970e242acdee2984918eb1dbdacf2815e6d54 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=727970e242acdee2984918eb...
Author: Huw Davies huw@codeweavers.com Date: Tue Jan 24 14:43:18 2006 +0100
msxml: Implement save.
---
dlls/msxml3/domdoc.c | 36 ++++++++++++++++++++++++++++++++++-- 1 files changed, 34 insertions(+), 2 deletions(-)
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(