Module: wine Branch: master Commit: ed33639561f7bfe6ade90f4dac8575258aa32ef3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ed33639561f7bfe6ade90f4dac...
Author: Hans Leidekker hans@codeweavers.com Date: Thu Jan 21 15:27:57 2016 +0100
webservices: Implement WsWriteXmlBufferToBytes.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/webservices/webservices.spec | 2 +- dlls/webservices/writer.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 42f5b63..fe9eb6c 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -188,6 +188,6 @@ @ stub WsWriteType @ stub WsWriteValue @ stdcall WsWriteXmlBuffer(ptr ptr ptr) -@ stub WsWriteXmlBufferToBytes +@ stdcall WsWriteXmlBufferToBytes(ptr ptr ptr ptr long ptr ptr ptr ptr) @ stub WsWriteXmlnsAttribute @ stdcall WsXmlStringEquals(ptr ptr ptr) diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c index 398d651..0178978 100644 --- a/dlls/webservices/writer.c +++ b/dlls/webservices/writer.c @@ -792,3 +792,41 @@ HRESULT WINAPI WsWriteXmlBuffer( WS_XML_WRITER *handle, WS_XML_BUFFER *buffer, W write_bytes( writer, xmlbuf->ptr, xmlbuf->size ); return S_OK; } + +/************************************************************************** + * WsWriteXmlBufferToBytes [webservices.@] + */ +HRESULT WINAPI WsWriteXmlBufferToBytes( WS_XML_WRITER *handle, WS_XML_BUFFER *buffer, + const WS_XML_WRITER_ENCODING *encoding, + const WS_XML_WRITER_PROPERTY *properties, ULONG count, + WS_HEAP *heap, void **bytes, ULONG *size, WS_ERROR *error ) +{ + struct writer *writer = (struct writer *)handle; + struct xmlbuf *xmlbuf = (struct xmlbuf *)buffer; + HRESULT hr; + char *buf; + ULONG i; + + TRACE( "%p %p %p %p %u %p %p %p %p\n", handle, buffer, encoding, properties, count, heap, + bytes, size, error ); + if (error) FIXME( "ignoring error parameter\n" ); + + if (!writer || !xmlbuf || !heap || !bytes) return E_INVALIDARG; + + if (encoding && encoding->encodingType != WS_XML_WRITER_ENCODING_TYPE_TEXT) + { + FIXME( "encoding type %u not supported\n", encoding->encodingType ); + return E_NOTIMPL; + } + + for (i = 0; i < count; i++) + { + hr = set_writer_prop( writer, properties[i].id, properties[i].value, properties[i].valueSize ); + if (hr != S_OK) return hr; + } + + if (!(buf = ws_alloc( heap, xmlbuf->size ))) return WS_E_QUOTA_EXCEEDED; + memcpy( buf, xmlbuf->ptr, xmlbuf->size ); + *bytes = buf; + return S_OK; +}