webservices: Implement WS_MOVE_TO_END_ELEMENT in the reader.

Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Hans Leidekker 2016-02-10 15:02:06 +01:00 committed by Alexandre Julliard
parent 5c4a061f39
commit 88e53782e8
1 changed files with 23 additions and 0 deletions

View File

@ -1405,6 +1405,25 @@ static BOOL move_to_child_element( struct reader *reader )
return FALSE; return FALSE;
} }
static BOOL move_to_end_element( struct reader *reader )
{
struct list *ptr;
struct node *node = reader->current;
if (node->hdr.node.nodeType != WS_XML_NODE_TYPE_ELEMENT) return FALSE;
if ((ptr = list_tail( &node->children )))
{
struct node *tail = LIST_ENTRY( ptr, struct node, entry );
if (tail->hdr.node.nodeType == WS_XML_NODE_TYPE_END_ELEMENT)
{
reader->current = tail;
return TRUE;
}
}
return FALSE;
}
static HRESULT read_move_to( struct reader *reader, WS_MOVE_TO move, BOOL *found ) static HRESULT read_move_to( struct reader *reader, WS_MOVE_TO move, BOOL *found )
{ {
struct list *ptr; struct list *ptr;
@ -1434,6 +1453,10 @@ static HRESULT read_move_to( struct reader *reader, WS_MOVE_TO move, BOOL *found
success = move_to_child_element( reader ); success = move_to_child_element( reader );
break; break;
case WS_MOVE_TO_END_ELEMENT:
success = move_to_end_element( reader );
break;
case WS_MOVE_TO_FIRST_NODE: case WS_MOVE_TO_FIRST_NODE:
if ((ptr = list_head( &reader->current->parent->children ))) if ((ptr = list_head( &reader->current->parent->children )))
{ {