Hans Leidekker : webservices: Get rid of read_rewind.
Alexandre Julliard
julliard at winehq.org
Tue Nov 27 14:26:11 CST 2018
Module: wine
Branch: master
Commit: 4fcb8baa615a0e32a0dce62678c0aea40e655428
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4fcb8baa615a0e32a0dce62678c0aea40e655428
Author: Hans Leidekker <hans at codeweavers.com>
Date: Tue Nov 27 14:13:09 2018 +0100
webservices: Get rid of read_rewind.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/webservices/reader.c | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index b573153..ff19254 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -939,10 +939,10 @@ static inline const unsigned char *read_current_ptr( struct reader *reader )
return &reader->read_bufptr[reader->read_pos];
}
-static inline HRESULT read_peek( struct reader *reader, unsigned char *byte )
+static inline HRESULT read_peek( struct reader *reader, unsigned char *bytes, unsigned int len )
{
- if (reader->read_pos >= reader->read_size) return WS_E_INVALID_FORMAT;
- *byte = reader->read_bufptr[reader->read_pos];
+ if (reader->read_pos + len > reader->read_size) return WS_E_INVALID_FORMAT;
+ memcpy( bytes, reader->read_bufptr + reader->read_pos, len );
return S_OK;
}
@@ -1025,11 +1025,6 @@ static inline void read_skip( struct reader *reader, unsigned int count )
reader->read_pos += count;
}
-static inline void read_rewind( struct reader *reader, unsigned int count )
-{
- reader->read_pos -= count;
-}
-
static inline BOOL read_isnamechar( unsigned int ch )
{
/* FIXME: incomplete */
@@ -1938,6 +1933,7 @@ static HRESULT read_element_text( struct reader *reader )
{
unsigned int len = 0, ch, skip;
const unsigned char *start;
+ unsigned char buf[2];
struct node *node = NULL, *parent;
WS_XML_ELEMENT_NODE *elem;
HRESULT hr;
@@ -1950,13 +1946,9 @@ static HRESULT read_element_text( struct reader *reader )
return S_OK;
}
- if ((hr = read_cmp( reader, "<", 1 )) != S_OK) return hr;
+ if ((hr = read_peek( reader, buf, 2 )) != S_OK) return hr;
+ if (buf[0] != '<' || !read_isnamechar( buf[1] )) return WS_E_INVALID_FORMAT;
read_skip( reader, 1 );
- if (!read_isnamechar( read_utf8_char( reader, &skip )))
- {
- read_rewind( reader, 1 );
- return WS_E_INVALID_FORMAT;
- }
if (!(elem = alloc_element_pair())) return E_OUTOFMEMORY;
node = (struct node *)elem;
@@ -2000,7 +1992,7 @@ static HRESULT read_attributes_bin( struct reader *reader, WS_XML_ELEMENT_NODE *
reader->current_attr = 0;
for (;;)
{
- if ((hr = read_peek( reader, &type )) != S_OK) return hr;
+ if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr;
if (!is_attribute_type( type )) break;
if ((hr = read_attribute_bin( reader, &attr )) != S_OK) return hr;
if ((hr = append_attribute( elem, attr )) != S_OK)
@@ -2405,7 +2397,7 @@ static HRESULT read_text_bytes( struct reader *reader, unsigned char type )
node->flags |= NODE_FLAG_TEXT_WITH_IMPLICIT_END_ELEMENT;
break;
}
- if ((hr = read_peek( reader, &type )) != S_OK) goto error;
+ if ((hr = read_peek( reader, &type, 1 )) != S_OK) goto error;
if (type < RECORD_BYTES8_TEXT || type > RECORD_BYTES32_TEXT_WITH_ENDELEMENT) break;
read_skip( reader, 1 );
}
@@ -3008,7 +3000,7 @@ static HRESULT read_node_bin( struct reader *reader )
return S_OK;
}
- if ((hr = read_peek( reader, &type )) != S_OK) return hr;
+ if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr;
if (type == RECORD_ENDELEMENT)
{
return read_endelement_bin( reader );
More information about the wine-cvs
mailing list