[08/10] webservices: Add support for UNIQUE_ID records in the writer.
Hans Leidekker
hans at codeweavers.com
Wed Jul 12 08:34:36 CDT 2017
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
dlls/webservices/writer.c | 41 ++++++++++++++++++++++++++++++-----------
1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 3657bef..1bf9a88 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -719,6 +719,9 @@ static enum record_type get_attr_text_record_type( const WS_XML_TEXT *text )
case WS_XML_TEXT_TYPE_GUID:
return RECORD_GUID_TEXT;
+ case WS_XML_TEXT_TYPE_UNIQUE_ID:
+ return RECORD_UNIQUE_ID_TEXT;
+
default:
FIXME( "unhandled text type %u\n", text->textType );
return 0;
@@ -860,6 +863,13 @@ static HRESULT write_attribute_value_bin( struct writer *writer, const WS_XML_TE
write_bytes( writer, (const BYTE *)&text_guid->value, sizeof(text_guid->value) );
return S_OK;
}
+ case RECORD_UNIQUE_ID_TEXT:
+ {
+ WS_XML_UNIQUE_ID_TEXT *text_unique_id = (WS_XML_UNIQUE_ID_TEXT *)text;
+ if ((hr = write_grow_buffer( writer, sizeof(text_unique_id->value) )) != S_OK) return hr;
+ write_bytes( writer, (const BYTE *)&text_unique_id->value, sizeof(text_unique_id->value) );
+ return S_OK;
+ }
default:
FIXME( "unhandled record type %02x\n", type );
return E_NOTIMPL;
@@ -2493,6 +2503,9 @@ static enum record_type get_text_record_type( const WS_XML_TEXT *text )
case WS_XML_TEXT_TYPE_GUID:
return RECORD_GUID_TEXT_WITH_ENDELEMENT;
+ case WS_XML_TEXT_TYPE_UNIQUE_ID:
+ return RECORD_UNIQUE_ID_TEXT_WITH_ENDELEMENT;
+
default:
FIXME( "unhandled text type %u\n", text->textType );
return 0;
@@ -2641,6 +2654,14 @@ static HRESULT write_text_bin( struct writer *writer, const WS_XML_TEXT *text, U
write_bytes( writer, (const BYTE *)&text_guid->value, sizeof(text_guid->value) );
return S_OK;
}
+ case RECORD_UNIQUE_ID_TEXT_WITH_ENDELEMENT:
+ {
+ WS_XML_UNIQUE_ID_TEXT *text_unique_id = (WS_XML_UNIQUE_ID_TEXT *)text;
+ if ((hr = write_grow_buffer( writer, 1 + sizeof(text_unique_id->value) )) != S_OK) return hr;
+ write_char( writer, type );
+ write_bytes( writer, (const BYTE *)&text_unique_id->value, sizeof(text_unique_id->value) );
+ return S_OK;
+ }
default:
FIXME( "unhandled record type %02x\n", type );
return E_NOTIMPL;
@@ -3203,9 +3224,8 @@ static HRESULT write_type_unique_id( struct writer *writer, WS_TYPE_MAPPING mapp
const WS_UNIQUE_ID_DESCRIPTION *desc, WS_WRITE_OPTION option,
const void *value, ULONG size )
{
- WS_XML_UTF8_TEXT utf8;
- WS_XML_UTF16_TEXT utf16;
- unsigned char buf[46]; /* "urn:uuid:00000000-0000-0000-0000-000000000000" */
+ WS_XML_UNIQUE_ID_TEXT text_unique_id;
+ WS_XML_UTF16_TEXT text_utf16;
const WS_UNIQUE_ID *ptr;
HRESULT hr;
@@ -3221,16 +3241,15 @@ static HRESULT write_type_unique_id( struct writer *writer, WS_TYPE_MAPPING mapp
if (ptr->uri.length)
{
- utf16.text.textType = WS_XML_TEXT_TYPE_UTF16;
- utf16.bytes = (BYTE *)ptr->uri.chars;
- utf16.byteCount = ptr->uri.length * sizeof(WCHAR);
- return write_type_text( writer, mapping, &utf16.text );
+ text_utf16.text.textType = WS_XML_TEXT_TYPE_UTF16;
+ text_utf16.bytes = (BYTE *)ptr->uri.chars;
+ text_utf16.byteCount = ptr->uri.length * sizeof(WCHAR);
+ return write_type_text( writer, mapping, &text_utf16.text );
}
- utf8.text.textType = WS_XML_TEXT_TYPE_UTF8;
- utf8.value.bytes = buf;
- utf8.value.length = format_urn( &ptr->guid, buf );
- return write_type_text( writer, mapping, &utf8.text );
+ text_unique_id.text.textType = WS_XML_TEXT_TYPE_UNIQUE_ID;
+ text_unique_id.value = ptr->guid;
+ return write_type_text( writer, mapping, &text_unique_id.text );
}
static HRESULT write_type_string( struct writer *writer, WS_TYPE_MAPPING mapping,
--
2.1.4
More information about the wine-patches
mailing list