Hans Leidekker : webservices: Implement WsSetReaderPosition.

Alexandre Julliard julliard at winehq.org
Mon Jul 4 09:54:41 CDT 2016


Module: wine
Branch: master
Commit: f01a209e2b343f5105cdfa510adc0e08902a8945
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f01a209e2b343f5105cdfa510adc0e08902a8945

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Jul  4 11:35:39 2016 +0200

webservices: Implement WsSetReaderPosition.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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




More information about the wine-cvs mailing list