Module: wine Branch: master Commit: cf8efc384a40502ae29c453dc8ce7f58392983d0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cf8efc384a40502ae29c453dc8...
Author: Hans Leidekker hans@codeweavers.com Date: Tue Sep 15 11:15:58 2015 +0200
webservices: Implement WsSetInput.
---
dlls/webservices/reader.c | 58 +++++++++++++++++++++++++++++++++++++++ dlls/webservices/webservices.spec | 2 +- 2 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c index 4f4d31c..7a811c7 100644 --- a/dlls/webservices/reader.c +++ b/dlls/webservices/reader.c @@ -276,6 +276,8 @@ reader_props[] =
struct reader { + const char *input_data; + ULONG input_size; ULONG prop_count; WS_XML_READER_PROPERTY prop[sizeof(reader_props)/sizeof(reader_props[0])]; }; @@ -407,6 +409,7 @@ HRESULT WINAPI WsGetReaderProperty( WS_XML_READER *handle, WS_XML_READER_PROPERT TRACE( "%p %u %p %u %p\n", handle, id, buf, size, error ); if (error) FIXME( "ignoring error parameter\n" );
+ if (!reader->input_data) return WS_E_INVALID_OPERATION; return get_reader_prop( reader, id, buf, size ); }
@@ -423,3 +426,58 @@ HRESULT WINAPI WsSetErrorProperty( WS_ERROR *handle, WS_ERROR_PROPERTY_ID id, co if (id == WS_ERROR_PROPERTY_LANGID) return WS_E_INVALID_OPERATION; return set_error_prop( error, id, value, size ); } + +/************************************************************************** + * WsSetInput [webservices.@] + */ +HRESULT WINAPI WsSetInput( WS_XML_READER *handle, const WS_XML_READER_ENCODING *encoding, + const WS_XML_READER_INPUT *input, const WS_XML_READER_PROPERTY *properties, + ULONG count, WS_ERROR *error ) +{ + struct reader *reader = (struct reader *)handle; + HRESULT hr; + ULONG i; + + TRACE( "%p %p %p %p %u %p\n", handle, encoding, input, properties, count, error ); + if (error) FIXME( "ignoring error parameter\n" ); + + if (!reader) return E_INVALIDARG; + + switch (encoding->encodingType) + { + case WS_XML_READER_ENCODING_TYPE_TEXT: + { + WS_XML_READER_TEXT_ENCODING *text = (WS_XML_READER_TEXT_ENCODING *)encoding; + if (text->charSet != WS_CHARSET_UTF8) + { + FIXME( "charset %u not supported\n", text->charSet ); + return E_NOTIMPL; + } + break; + } + default: + FIXME( "encoding type %u not supported\n", encoding->encodingType ); + return E_NOTIMPL; + } + switch (input->inputType) + { + case WS_XML_READER_INPUT_TYPE_BUFFER: + { + WS_XML_READER_BUFFER_INPUT *buf = (WS_XML_READER_BUFFER_INPUT *)input; + reader->input_data = buf->encodedData; + reader->input_size = buf->encodedDataSize; + break; + } + default: + FIXME( "input type %u not supported\n", input->inputType ); + return E_NOTIMPL; + } + + for (i = 0; i < count; i++) + { + hr = set_reader_prop( reader, properties[i].id, properties[i].value, properties[i].valueSize ); + if (hr != S_OK) return hr; + } + + return S_OK; +} diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 487c2af..6a81612 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -150,7 +150,7 @@ @ stub WsSetFaultErrorDetail @ stub WsSetFaultErrorProperty @ stub WsSetHeader -@ stub WsSetInput +@ stdcall WsSetInput(ptr ptr ptr ptr long ptr) @ stub WsSetInputToBuffer @ stub WsSetListenerProperty @ stub WsSetMessageProperty