Module: wine Branch: master Commit: 1a28e34a91b84c8aa6d188a08c398b6436b28045 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1a28e34a91b84c8aa6d188a08c...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Sep 6 15:56:07 2017 +0200
webservices: Return HRESULT from insert_string.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/webservices/channel.c | 4 ++-- dlls/webservices/string.c | 43 +++++++++++++++++----------------- dlls/webservices/webservices_private.h | 2 +- 3 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c index 87184c7..1300da8 100644 --- a/dlls/webservices/channel.c +++ b/dlls/webservices/channel.c @@ -1497,10 +1497,10 @@ static HRESULT build_dict( const BYTE *buf, ULONG buflen, struct dictionary *dic ptr += size; continue; } - if (!insert_string( dict, bytes, size, index, NULL )) + if ((hr = insert_string( dict, bytes, size, index, NULL )) != S_OK) { clear_dict( dict ); - return E_OUTOFMEMORY; + return hr; } ptr += size; } diff --git a/dlls/webservices/string.c b/dlls/webservices/string.c index 1d1ef61..e53a364 100644 --- a/dlls/webservices/string.c +++ b/dlls/webservices/string.c @@ -87,37 +87,37 @@ int find_string( const struct dictionary *dict, const unsigned char *data, ULONG #define MIN_DICTIONARY_SIZE 256 #define MAX_DICTIONARY_SIZE 2048
-static BOOL grow_dict( struct dictionary *dict, ULONG size ) +static HRESULT grow_dict( struct dictionary *dict, ULONG size ) { WS_XML_STRING *tmp; ULONG new_size, *tmp_sorted;
assert( !dict->dict.isConst ); - if (dict->size >= dict->dict.stringCount + size) return TRUE; - if (dict->size + size > MAX_DICTIONARY_SIZE) return FALSE; + if (dict->size >= dict->dict.stringCount + size) return S_OK; + if (dict->size + size > MAX_DICTIONARY_SIZE) return WS_E_QUOTA_EXCEEDED;
if (!dict->dict.strings) { new_size = max( MIN_DICTIONARY_SIZE, size ); - if (!(dict->dict.strings = heap_alloc( new_size * sizeof(*dict->dict.strings) ))) return FALSE; + if (!(dict->dict.strings = heap_alloc( new_size * sizeof(*dict->dict.strings) ))) return E_OUTOFMEMORY; if (!(dict->sorted = heap_alloc( new_size * sizeof(*dict->sorted) ))) { heap_free( dict->dict.strings ); dict->dict.strings = NULL; - return FALSE; + return E_OUTOFMEMORY; } dict->size = new_size; - return TRUE; + return S_OK; }
new_size = max( dict->size * 2, size ); - if (!(tmp = heap_realloc( dict->dict.strings, new_size * sizeof(*tmp) ))) return FALSE; + if (!(tmp = heap_realloc( dict->dict.strings, new_size * sizeof(*tmp) ))) return E_OUTOFMEMORY; dict->dict.strings = tmp; - if (!(tmp_sorted = heap_realloc( dict->sorted, new_size * sizeof(*tmp_sorted) ))) return FALSE; + if (!(tmp_sorted = heap_realloc( dict->sorted, new_size * sizeof(*tmp_sorted) ))) return E_OUTOFMEMORY; dict->sorted = tmp_sorted;
dict->size = new_size; - return TRUE; + return S_OK; }
void clear_dict( struct dictionary *dict ) @@ -133,11 +133,13 @@ void clear_dict( struct dictionary *dict ) dict->size = 0; }
-BOOL insert_string( struct dictionary *dict, unsigned char *data, ULONG len, int i, ULONG *ret_id ) +HRESULT insert_string( struct dictionary *dict, unsigned char *data, ULONG len, int i, ULONG *ret_id ) { ULONG id = dict->dict.stringCount; + HRESULT hr; + assert( !dict->dict.isConst ); - if (!grow_dict( dict, 1 )) return FALSE; + if ((hr = grow_dict( dict, 1 )) != S_OK) return hr; memmove( &dict->sorted[i] + 1, &dict->sorted[i], (dict->dict.stringCount - i) * sizeof(*dict->sorted) ); dict->sorted[i] = id;
@@ -147,22 +149,24 @@ BOOL insert_string( struct dictionary *dict, unsigned char *data, ULONG len, int dict->dict.strings[id].id = id; dict->dict.stringCount++; if (ret_id) *ret_id = id; - return TRUE; + return S_OK; }
HRESULT CALLBACK insert_string_cb( void *state, const WS_XML_STRING *str, BOOL *found, ULONG *id, WS_ERROR *error ) { struct dictionary *dict = state; int index = find_string( dict, str->bytes, str->length, id ); + HRESULT hr = S_OK;
assert( !dict->dict.isConst ); - if (index == -1 || insert_string( dict, str->bytes, str->length, index, id )) *found = TRUE; + if (index == -1 || (hr = insert_string( dict, str->bytes, str->length, index, id )) == S_OK) *found = TRUE; else *found = FALSE; - return S_OK; + return hr; }
HRESULT add_xml_string( WS_XML_STRING *str ) { + HRESULT hr = S_OK; int index; ULONG id;
@@ -172,17 +176,13 @@ HRESULT add_xml_string( WS_XML_STRING *str ) { heap_free( str->bytes ); *str = dict_builtin.dict.strings[id]; - LeaveCriticalSection( &dict_cs ); - return S_OK; } - if (insert_string( &dict_builtin, str->bytes, str->length, index, &id )) + else if ((hr = insert_string( &dict_builtin, str->bytes, str->length, index, &id )) == S_OK) { *str = dict_builtin.dict.strings[id]; - LeaveCriticalSection( &dict_cs ); - return S_OK; } LeaveCriticalSection( &dict_cs ); - return WS_E_QUOTA_EXCEEDED; + return hr; }
WS_XML_STRING *alloc_xml_string( const unsigned char *data, ULONG len ) @@ -214,6 +214,7 @@ WS_XML_STRING *dup_xml_string( const WS_XML_STRING *src ) { WS_XML_STRING *ret; unsigned char *data; + HRESULT hr; int index; ULONG id;
@@ -237,7 +238,7 @@ WS_XML_STRING *dup_xml_string( const WS_XML_STRING *src ) return NULL; } memcpy( data, src->bytes, src->length ); - if (insert_string( &dict_builtin, data, src->length, index, &id )) + if ((hr = insert_string( &dict_builtin, data, src->length, index, &id )) == S_OK) { *ret = dict_builtin.dict.strings[id]; LeaveCriticalSection( &dict_cs ); diff --git a/dlls/webservices/webservices_private.h b/dlls/webservices/webservices_private.h index 9572a02..958733c 100644 --- a/dlls/webservices/webservices_private.h +++ b/dlls/webservices/webservices_private.h @@ -48,7 +48,7 @@ struct dictionary dict_builtin DECLSPEC_HIDDEN; const struct dictionary dict_builtin_static DECLSPEC_HIDDEN;
int find_string( const struct dictionary *, const unsigned char *, ULONG, ULONG * ) DECLSPEC_HIDDEN; -BOOL insert_string( struct dictionary *, unsigned char *, ULONG, int, ULONG * ) DECLSPEC_HIDDEN; +HRESULT insert_string( struct dictionary *, unsigned char *, ULONG, int, ULONG * ) DECLSPEC_HIDDEN; HRESULT CALLBACK insert_string_cb( void *, const WS_XML_STRING *, BOOL *, ULONG *, WS_ERROR * ) DECLSPEC_HIDDEN; void clear_dict( struct dictionary * ) DECLSPEC_HIDDEN;