webservices: Implement WsWriteStartAttribute.
Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
08c32f4ec3
commit
919b1b5fdc
|
@ -284,7 +284,7 @@ struct node *alloc_node( WS_XML_NODE_TYPE type )
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_attribute( WS_XML_ATTRIBUTE *attr )
|
void free_attribute( WS_XML_ATTRIBUTE *attr )
|
||||||
{
|
{
|
||||||
if (!attr) return;
|
if (!attr) return;
|
||||||
heap_free( attr->prefix );
|
heap_free( attr->prefix );
|
||||||
|
@ -807,7 +807,7 @@ static HRESULT read_xmldecl( struct reader *reader )
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT append_attribute( WS_XML_ELEMENT_NODE *elem, WS_XML_ATTRIBUTE *attr )
|
HRESULT append_attribute( WS_XML_ELEMENT_NODE *elem, WS_XML_ATTRIBUTE *attr )
|
||||||
{
|
{
|
||||||
if (elem->attributeCount)
|
if (elem->attributeCount)
|
||||||
{
|
{
|
||||||
|
|
|
@ -181,7 +181,7 @@
|
||||||
@ stub WsWriteMessageStart
|
@ stub WsWriteMessageStart
|
||||||
@ stub WsWriteNode
|
@ stub WsWriteNode
|
||||||
@ stub WsWriteQualifiedName
|
@ stub WsWriteQualifiedName
|
||||||
@ stub WsWriteStartAttribute
|
@ stdcall WsWriteStartAttribute(ptr ptr ptr ptr long ptr)
|
||||||
@ stub WsWriteStartCData
|
@ stub WsWriteStartCData
|
||||||
@ stdcall WsWriteStartElement(ptr ptr ptr ptr ptr)
|
@ stdcall WsWriteStartElement(ptr ptr ptr ptr ptr)
|
||||||
@ stub WsWriteText
|
@ stub WsWriteText
|
||||||
|
|
|
@ -29,6 +29,8 @@ void *ws_realloc( WS_HEAP *, void *, SIZE_T ) DECLSPEC_HIDDEN;
|
||||||
void ws_free( WS_HEAP *, void * ) DECLSPEC_HIDDEN;
|
void ws_free( WS_HEAP *, void * ) DECLSPEC_HIDDEN;
|
||||||
const char *debugstr_xmlstr( const WS_XML_STRING * ) DECLSPEC_HIDDEN;
|
const char *debugstr_xmlstr( const WS_XML_STRING * ) DECLSPEC_HIDDEN;
|
||||||
WS_XML_STRING *alloc_xml_string( const char *, ULONG ) DECLSPEC_HIDDEN;
|
WS_XML_STRING *alloc_xml_string( const char *, ULONG ) DECLSPEC_HIDDEN;
|
||||||
|
HRESULT append_attribute( WS_XML_ELEMENT_NODE *, WS_XML_ATTRIBUTE * ) DECLSPEC_HIDDEN;
|
||||||
|
void free_attribute( WS_XML_ATTRIBUTE * ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
struct node
|
struct node
|
||||||
{
|
{
|
||||||
|
|
|
@ -632,6 +632,49 @@ HRESULT WINAPI WsWriteEndStartElement( WS_XML_WRITER *handle, WS_ERROR *error )
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* WsWriteStartAttribute [webservices.@]
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI WsWriteStartAttribute( WS_XML_WRITER *handle, const WS_XML_STRING *prefix,
|
||||||
|
const WS_XML_STRING *localname, const WS_XML_STRING *ns,
|
||||||
|
BOOL single, WS_ERROR *error )
|
||||||
|
{
|
||||||
|
struct writer *writer = (struct writer *)handle;
|
||||||
|
WS_XML_ELEMENT_NODE *elem;
|
||||||
|
WS_XML_ATTRIBUTE *attr;
|
||||||
|
HRESULT hr = E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
TRACE( "%p %s %s %s %d %p\n", handle, debugstr_xmlstr(prefix), debugstr_xmlstr(localname),
|
||||||
|
debugstr_xmlstr(ns), single, error );
|
||||||
|
if (error) FIXME( "ignoring error parameter\n" );
|
||||||
|
|
||||||
|
if (!writer || !localname || !ns) return E_INVALIDARG;
|
||||||
|
|
||||||
|
if (writer->state != WRITER_STATE_STARTELEMENT) return WS_E_INVALID_OPERATION;
|
||||||
|
elem = (WS_XML_ELEMENT_NODE *)writer->current;
|
||||||
|
|
||||||
|
if (!(attr = heap_alloc_zero( sizeof(*attr) ))) return E_OUTOFMEMORY;
|
||||||
|
attr->singleQuote = !!single;
|
||||||
|
|
||||||
|
if (prefix && !(attr->prefix = alloc_xml_string( (const char *)prefix->bytes, prefix->length )))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (!(attr->localName = alloc_xml_string( (const char *)localname->bytes, localname->length )))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (!(attr->ns = alloc_xml_string( (const char *)ns->bytes, ns->length )))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if ((hr = append_attribute( elem, attr )) != S_OK) goto error;
|
||||||
|
|
||||||
|
writer->state = WRITER_STATE_STARTATTRIBUTE;
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
error:
|
||||||
|
free_attribute( attr );
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* WsWriteStartElement [webservices.@]
|
* WsWriteStartElement [webservices.@]
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue