From e87c64f69ce38768b5be61aaf6127ff9a43a09e6 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Thu, 25 Aug 2016 20:02:48 +0200 Subject: [PATCH] webservices: Allow structures to be passed by value in WsWriteType. Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/webservices/tests/writer.c | 15 +++++++++++++++ dlls/webservices/writer.c | 4 +--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/dlls/webservices/tests/writer.c b/dlls/webservices/tests/writer.c index 128e66e30a4..8888c695394 100644 --- a/dlls/webservices/tests/writer.c +++ b/dlls/webservices/tests/writer.c @@ -791,6 +791,21 @@ static void test_simple_struct_type(void) ok( hr == S_OK, "got %08x\n", hr ); check_output( writer, "value", __LINE__ ); + /* required value */ + hr = set_output( writer ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsWriteStartElement( writer, NULL, &localname, &ns, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsWriteType( writer, WS_ELEMENT_CONTENT_TYPE_MAPPING, WS_STRUCT_TYPE, &s, + WS_WRITE_REQUIRED_VALUE, test, sizeof(*test), NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = WsWriteEndElement( writer, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + check_output( writer, "value", __LINE__ ); + hr = set_output( writer ); ok( hr == S_OK, "got %08x\n", hr ); diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c index 89f9465841f..8872a37b1f6 100644 --- a/dlls/webservices/writer.c +++ b/dlls/webservices/writer.c @@ -1695,9 +1695,7 @@ static HRESULT write_type( struct writer *writer, WS_TYPE_MAPPING mapping, WS_TY case WS_STRUCT_TYPE: { const void *ptr; - - if (!desc || option == WS_WRITE_REQUIRED_VALUE) return E_INVALIDARG; - + if (!desc) return E_INVALIDARG; if (!option) option = WS_WRITE_REQUIRED_POINTER; if ((hr = get_value_ptr( option, value, size, (const void **)&ptr )) != S_OK) return hr; return write_type_struct( writer, mapping, desc, ptr );