[3/9] webservices: Implement WsSetReaderPosition.
Hans Leidekker
hans at codeweavers.com
Mon Jul 4 04:35:39 CDT 2016
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
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
--
2.8.1
More information about the wine-patches
mailing list