Hans Leidekker : webservices: Add support for GUID records in the writer.
Alexandre Julliard
julliard at winehq.org
Wed Jul 12 15:37:25 CDT 2017
Module: wine
Branch: master
Commit: b85e6800d011a5a2203fea4dfd105ba6e0366555
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b85e6800d011a5a2203fea4dfd105ba6e0366555
Author: Hans Leidekker <hans at codeweavers.com>
Date: Wed Jul 12 15:34:35 2017 +0200
webservices: Add support for GUID records in the writer.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/webservices/reader.c | 15 +++++++++------
dlls/webservices/webservices_private.h | 8 ++++----
dlls/webservices/writer.c | 33 ++++++++++++++++++++++++++-------
3 files changed, 39 insertions(+), 17 deletions(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 4aacaf7..63de1ad 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -1541,7 +1541,7 @@ static HRESULT read_attribute_value_bin( struct reader *reader, WS_XML_ATTRIBUTE
if (!(text_utf8 = alloc_utf8_text( str->bytes, str->length ))) return E_OUTOFMEMORY;
break;
- case RECORD_UNIQUEID_TEXT:
+ case RECORD_UNIQUE_ID_TEXT:
{
WS_XML_UNIQUE_ID_TEXT *text_unique_id;
if ((hr = read_bytes( reader, (unsigned char *)&guid, sizeof(guid) )) != S_OK) return hr;
@@ -1549,7 +1549,7 @@ static HRESULT read_attribute_value_bin( struct reader *reader, WS_XML_ATTRIBUTE
attr->value = &text_unique_id->text;
return S_OK;
}
- case RECORD_UUID_TEXT:
+ case RECORD_GUID_TEXT:
{
WS_XML_GUID_TEXT *guid_text;
if ((hr = read_bytes( reader, (unsigned char *)&guid, sizeof(guid) )) != S_OK) return hr;
@@ -2446,14 +2446,14 @@ static HRESULT read_text_bin( struct reader *reader )
if (!(node = alloc_utf8_text_node( str->bytes, str->length, NULL ))) return E_OUTOFMEMORY;
break;
}
- case RECORD_UNIQUEID_TEXT:
- case RECORD_UNIQUEID_TEXT_WITH_ENDELEMENT:
+ case RECORD_UNIQUE_ID_TEXT:
+ case RECORD_UNIQUE_ID_TEXT_WITH_ENDELEMENT:
if ((hr = read_bytes( reader, (unsigned char *)&uuid, sizeof(uuid) )) != S_OK) return hr;
if (!(node = alloc_unique_id_text_node( &uuid ))) return E_OUTOFMEMORY;
break;
- case RECORD_UUID_TEXT:
- case RECORD_UUID_TEXT_WITH_ENDELEMENT:
+ case RECORD_GUID_TEXT:
+ case RECORD_GUID_TEXT_WITH_ENDELEMENT:
if ((hr = read_bytes( reader, (unsigned char *)&uuid, sizeof(uuid) )) != S_OK) return hr;
if (!(node = alloc_guid_text_node( &uuid ))) return E_OUTOFMEMORY;
break;
@@ -5857,6 +5857,9 @@ ULONG get_type_size( WS_TYPE type, const void *desc )
case WS_GUID_TYPE:
return sizeof(GUID);
+ case WS_UNIQUE_ID_TYPE:
+ return sizeof(WS_UNIQUE_ID);
+
case WS_STRING_TYPE:
return sizeof(WS_STRING);
diff --git a/dlls/webservices/webservices_private.h b/dlls/webservices/webservices_private.h
index ddaf59e..b88a50c 100644
--- a/dlls/webservices/webservices_private.h
+++ b/dlls/webservices/webservices_private.h
@@ -317,12 +317,12 @@ enum record_type
RECORD_EMPTY_TEXT_WITH_ENDELEMENT = 0xa9,
RECORD_DICTIONARY_TEXT = 0xaa,
RECORD_DICTIONARY_TEXT_WITH_ENDELEMENT = 0xab,
- RECORD_UNIQUEID_TEXT = 0xac,
- RECORD_UNIQUEID_TEXT_WITH_ENDELEMENT = 0xad,
+ RECORD_UNIQUE_ID_TEXT = 0xac,
+ RECORD_UNIQUE_ID_TEXT_WITH_ENDELEMENT = 0xad,
RECORD_TIMESPAN_TEXT = 0xae,
RECORD_TIMESPAN_TEXT_WITH_ENDELEMENT = 0xaf,
- RECORD_UUID_TEXT = 0xb0,
- RECORD_UUID_TEXT_WITH_ENDELEMENT = 0xb1,
+ RECORD_GUID_TEXT = 0xb0,
+ RECORD_GUID_TEXT_WITH_ENDELEMENT = 0xb1,
RECORD_UINT64_TEXT = 0xb2,
RECORD_UINT64_TEXT_WITH_ENDELEMENT = 0xb3,
RECORD_BOOL_TEXT = 0xb4,
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 78afa4a..e3b9214 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -716,6 +716,9 @@ static enum record_type get_attr_text_record_type( const WS_XML_TEXT *text )
if (text_double->value <= MAX_INT32) return RECORD_INT32_TEXT;
return RECORD_INT64_TEXT;
}
+ case WS_XML_TEXT_TYPE_GUID:
+ return RECORD_GUID_TEXT;
+
default:
FIXME( "unhandled text type %u\n", text->textType );
return 0;
@@ -851,8 +854,15 @@ static HRESULT write_attribute_value_bin( struct writer *writer, const WS_XML_TE
write_bytes( writer, (const BYTE *)&text_double->value, sizeof(text_double->value) );
return S_OK;
}
+ case RECORD_GUID_TEXT:
+ {
+ WS_XML_GUID_TEXT *text_guid = (WS_XML_GUID_TEXT *)text;
+ if ((hr = write_grow_buffer( writer, sizeof(text_guid->value) )) != S_OK) return hr;
+ write_bytes( writer, (const BYTE *)&text_guid->value, sizeof(text_guid->value) );
+ return S_OK;
+ }
default:
- ERR( "unhandled record type %02x\n", type );
+ FIXME( "unhandled record type %02x\n", type );
return E_NOTIMPL;
}
}
@@ -2481,6 +2491,9 @@ static enum record_type get_text_record_type( const WS_XML_TEXT *text )
if (text_double->value <= MAX_INT32) return RECORD_INT32_TEXT_WITH_ENDELEMENT;
return RECORD_INT64_TEXT_WITH_ENDELEMENT;
}
+ case WS_XML_TEXT_TYPE_GUID:
+ return RECORD_GUID_TEXT_WITH_ENDELEMENT;
+
default:
FIXME( "unhandled text type %u\n", text->textType );
return 0;
@@ -2621,6 +2634,14 @@ static HRESULT write_text_bin( struct writer *writer, const WS_XML_TEXT *text, U
write_bytes( writer, (const BYTE *)&text_double->value, sizeof(text_double->value) );
return S_OK;
}
+ case RECORD_GUID_TEXT_WITH_ENDELEMENT:
+ {
+ WS_XML_GUID_TEXT *text_guid = (WS_XML_GUID_TEXT *)text;
+ if ((hr = write_grow_buffer( writer, 1 + sizeof(text_guid->value) )) != S_OK) return hr;
+ write_char( writer, type );
+ write_bytes( writer, (const BYTE *)&text_guid->value, sizeof(text_guid->value) );
+ return S_OK;
+ }
default:
FIXME( "unhandled record type %02x\n", type );
return E_NOTIMPL;
@@ -3160,8 +3181,7 @@ static HRESULT write_type_guid( struct writer *writer, WS_TYPE_MAPPING mapping,
const WS_GUID_DESCRIPTION *desc, WS_WRITE_OPTION option,
const void *value, ULONG size )
{
- WS_XML_UTF8_TEXT utf8;
- unsigned char buf[37]; /* "00000000-0000-0000-0000-000000000000" */
+ WS_XML_GUID_TEXT text_guid;
const GUID *ptr;
HRESULT hr;
@@ -3175,10 +3195,9 @@ static HRESULT write_type_guid( struct writer *writer, WS_TYPE_MAPPING mapping,
if ((hr = get_value_ptr( option, value, size, sizeof(GUID), (const void **)&ptr )) != S_OK) return hr;
if (option == WS_WRITE_NILLABLE_POINTER && !ptr) return write_add_nil_attribute( writer );
- utf8.text.textType = WS_XML_TEXT_TYPE_UTF8;
- utf8.value.bytes = buf;
- utf8.value.length = format_guid( ptr, buf );
- return write_type_text( writer, mapping, &utf8.text );
+ text_guid.text.textType = WS_XML_TEXT_TYPE_GUID;
+ text_guid.value = *ptr;
+ return write_type_text( writer, mapping, &text_guid.text );
}
static HRESULT write_type_unique_id( struct writer *writer, WS_TYPE_MAPPING mapping,
More information about the wine-cvs
mailing list