Nikolay Sivov : webservices: Added WsResetError().
Alexandre Julliard
julliard at winehq.org
Tue Jun 14 12:04:33 CDT 2016
Module: wine
Branch: master
Commit: 5310f9690fdb5e37e7757487283569a05293e3dc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5310f9690fdb5e37e7757487283569a05293e3dc
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Jun 13 19:14:47 2016 +0300
webservices: Added WsResetError().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
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 | 58 +++++++++++++++++++++++++++++++++++++++
dlls/webservices/webservices.spec | 2 +-
include/webservices.h | 1 +
4 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 56fa28c..6452e21 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -142,6 +142,23 @@ void WINAPI WsFreeError( WS_ERROR *handle )
heap_free( error );
}
+/**************************************************************************
+ * WsResetError [webservices.@]
+ */
+HRESULT WINAPI WsResetError( WS_ERROR *handle )
+{
+ struct error *error = (struct error *)handle;
+ ULONG code;
+
+ TRACE( "%p\n", handle );
+
+ if (!handle) return E_INVALIDARG;
+
+ /* FIXME: release strings added with WsAddErrorString when it's implemented, reset string count */
+ code = 0;
+ return prop_set( error->prop, error->prop_count, WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE, &code, sizeof(code) );
+}
+
static const struct prop_desc heap_props[] =
{
{ sizeof(SIZE_T), FALSE }, /* WS_HEAP_PROPERTY_MAX_SIZE */
diff --git a/dlls/webservices/tests/reader.c b/dlls/webservices/tests/reader.c
index 1e167c3..310d973 100644
--- a/dlls/webservices/tests/reader.c
+++ b/dlls/webservices/tests/reader.c
@@ -3359,6 +3359,63 @@ static void test_WsReadValue(void)
WsFreeReader( reader );
}
+static void test_WsResetError(void)
+{
+ WS_ERROR_PROPERTY prop;
+ ULONG size, code;
+ WS_ERROR *error;
+ LANGID langid;
+ HRESULT hr;
+
+ hr = WsResetError( NULL );
+ ok( hr == E_INVALIDARG, "got %08x\n", hr );
+
+ error = NULL;
+ hr = WsCreateError( NULL, 0, &error );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( error != NULL, "error not set\n" );
+
+ code = 0xdeadbeef;
+ size = sizeof(code);
+ hr = WsSetErrorProperty( error, WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE, &code, size );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsResetError( error );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ code = 0xdeadbeef;
+ size = sizeof(code);
+ hr = WsGetErrorProperty( error, WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE, &code, size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !code, "got %u\n", code );
+
+ WsFreeError( error );
+
+ langid = MAKELANGID( LANG_DUTCH, SUBLANG_DEFAULT );
+ prop.id = WS_ERROR_PROPERTY_LANGID;
+ prop.value = &langid;
+ prop.valueSize = sizeof(langid);
+ hr = WsCreateError( &prop, 1, &error );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ langid = 0xdead;
+ size = sizeof(langid);
+ hr = WsGetErrorProperty( error, WS_ERROR_PROPERTY_LANGID, &langid, size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( langid == MAKELANGID( LANG_DUTCH, SUBLANG_DEFAULT ), "got %u\n", langid );
+
+ hr = WsResetError( error );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ langid = 0xdead;
+ size = sizeof(langid);
+ hr = WsGetErrorProperty( error, WS_ERROR_PROPERTY_LANGID, &langid, size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( langid == MAKELANGID( LANG_DUTCH, SUBLANG_DEFAULT ), "got %u\n", langid );
+
+ WsFreeError( error );
+}
+
START_TEST(reader)
{
test_WsCreateError();
@@ -3390,4 +3447,5 @@ START_TEST(reader)
test_double();
test_WsReadElement();
test_WsReadValue();
+ test_WsResetError();
}
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index 1ecef6c..3c6262b 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -134,7 +134,7 @@
@ stub WsRequestReply
@ stub WsRequestSecurityToken
@ stub WsResetChannel
-@ stub WsResetError
+@ stdcall WsResetError(ptr)
@ stdcall WsResetHeap(ptr ptr)
@ stub WsResetListener
@ stub WsResetMessage
diff --git a/include/webservices.h b/include/webservices.h
index d9fc9d1..a8d74e9 100644
--- a/include/webservices.h
+++ b/include/webservices.h
@@ -1148,6 +1148,7 @@ HRESULT WINAPI WsReadToStartElement(WS_XML_READER*, const WS_XML_STRING*, const
HRESULT WINAPI WsReadType(WS_XML_READER*, WS_TYPE_MAPPING, WS_TYPE, const void*, WS_READ_OPTION,
WS_HEAP*, void*, ULONG, WS_ERROR*);
HRESULT WINAPI WsReadValue(WS_XML_READER*, WS_VALUE_TYPE, void*, ULONG, WS_ERROR*);
+HRESULT WINAPI WsResetError(WS_ERROR*);
HRESULT WINAPI WsResetHeap(WS_HEAP*, WS_ERROR*);
HRESULT WINAPI WsSendMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_WRITE_OPTION,
const void*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
More information about the wine-cvs
mailing list