Module: wine Branch: master Commit: f01a209e2b343f5105cdfa510adc0e08902a8945 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f01a209e2b343f5105cdfa510a...
Author: Hans Leidekker hans@codeweavers.com Date: Mon Jul 4 11:35:39 2016 +0200
webservices: Implement WsSetReaderPosition.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/webservices/reader.c | 17 ++++++++++++++ dlls/webservices/tests/reader.c | 48 +++++++++++++++++++++++++++++++++++++++ dlls/webservices/webservices.spec | 2 +- 3 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c index b326bd8..eb89af4 100644 --- a/dlls/webservices/reader.c +++ b/dlls/webservices/reader.c @@ -3979,3 +3979,20 @@ HRESULT WINAPI WsGetReaderPosition( WS_XML_READER *handle, WS_XML_NODE_POSITION pos->node = reader->current; return S_OK; } + +/************************************************************************** + * WsSetReaderPosition [webservices.@] + */ +HRESULT WINAPI WsSetReaderPosition( WS_XML_READER *handle, const WS_XML_NODE_POSITION *pos, WS_ERROR *error ) +{ + struct reader *reader = (struct reader *)handle; + + TRACE( "%p %p %p\n", handle, pos, error ); + if (error) FIXME( "ignoring error parameter\n" ); + + if (!reader || !pos || (struct xmlbuf *)pos->buffer != reader->input_buf) return E_INVALIDARG; + if (!reader->input_buf) return WS_E_INVALID_OPERATION; + + reader->current = pos->node; + return S_OK; +} diff --git a/dlls/webservices/tests/reader.c b/dlls/webservices/tests/reader.c index a613fa2..5c4770c 100644 --- a/dlls/webservices/tests/reader.c +++ b/dlls/webservices/tests/reader.c @@ -3495,6 +3495,53 @@ static void test_WsGetReaderPosition(void) WsFreeHeap( heap ); }
+static void test_WsSetReaderPosition(void) +{ + WS_HEAP *heap; + WS_XML_READER *reader; + WS_XML_BUFFER *buf1, *buf2; + WS_XML_NODE_POSITION pos; + HRESULT hr; + + hr = WsCreateHeap( 1 << 16, 0, NULL, 0, &heap, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsSetReaderPosition( NULL, NULL, NULL ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + hr = WsCreateReader( NULL, 0, &reader, NULL ) ; + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsCreateXmlBuffer( heap, NULL, 0, &buf1, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsSetInputToBuffer( reader, buf1, NULL, 0, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsSetReaderPosition( reader, NULL, NULL ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + pos.buffer = pos.node = NULL; + hr = WsGetReaderPosition( reader, &pos, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( pos.buffer == buf1, "wrong buffer\n" ); + ok( pos.node != NULL, "node not set\n" ); + + hr = WsSetReaderPosition( reader, &pos, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + /* different buffer */ + hr = WsCreateXmlBuffer( heap, NULL, 0, &buf2, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + pos.buffer = buf2; + hr = WsSetReaderPosition( reader, &pos, NULL ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + WsFreeReader( reader ); + WsFreeHeap( heap ); +} + START_TEST(reader) { test_WsCreateError(); @@ -3528,4 +3575,5 @@ START_TEST(reader) test_WsReadValue(); test_WsResetError(); test_WsGetReaderPosition(); + test_WsSetReaderPosition(); } diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec index 814788f..3f7e644 100644 --- a/dlls/webservices/webservices.spec +++ b/dlls/webservices/webservices.spec @@ -156,7 +156,7 @@ @ stdcall WsSetMessageProperty(ptr long ptr long ptr) @ stdcall WsSetOutput(ptr ptr ptr ptr long ptr) @ stdcall WsSetOutputToBuffer(ptr ptr ptr long ptr) -@ stub WsSetReaderPosition +@ stdcall WsSetReaderPosition(ptr ptr ptr) @ stdcall WsSetWriterPosition(ptr ptr ptr) @ stub WsShutdownSessionChannel @ stub WsSkipNode