[6/9] webservices: Implement WsWriteStartAttribute.
Hans Leidekker
hans at codeweavers.com
Wed Nov 11 04:02:06 CST 2015
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
dlls/webservices/reader.c | 4 ++--
dlls/webservices/webservices.spec | 2 +-
dlls/webservices/webservices_private.h | 2 ++
dlls/webservices/writer.c | 43 ++++++++++++++++++++++++++++++++++
4 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index a0d0792..cc71f98 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -284,7 +284,7 @@ struct node *alloc_node( WS_XML_NODE_TYPE type )
return ret;
}
-static void free_attribute( WS_XML_ATTRIBUTE *attr )
+void free_attribute( WS_XML_ATTRIBUTE *attr )
{
if (!attr) return;
heap_free( attr->prefix );
@@ -807,7 +807,7 @@ static HRESULT read_xmldecl( struct reader *reader )
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)
{
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index df56adb..c92588b 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -181,7 +181,7 @@
@ stub WsWriteMessageStart
@ stub WsWriteNode
@ stub WsWriteQualifiedName
-@ stub WsWriteStartAttribute
+@ stdcall WsWriteStartAttribute(ptr ptr ptr ptr long ptr)
@ stub WsWriteStartCData
@ stdcall WsWriteStartElement(ptr ptr ptr ptr ptr)
@ stub WsWriteText
diff --git a/dlls/webservices/webservices_private.h b/dlls/webservices/webservices_private.h
index cac9b87..3bb039f 100644
--- a/dlls/webservices/webservices_private.h
+++ b/dlls/webservices/webservices_private.h
@@ -29,6 +29,8 @@ void *ws_realloc( WS_HEAP *, void *, SIZE_T ) DECLSPEC_HIDDEN;
void ws_free( WS_HEAP *, void * ) DECLSPEC_HIDDEN;
const char *debugstr_xmlstr( const WS_XML_STRING * ) 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
{
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 976f97b..a9ff761 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -633,6 +633,49 @@ HRESULT WINAPI WsWriteEndStartElement( WS_XML_WRITER *handle, WS_ERROR *error )
}
/**************************************************************************
+ * 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.@]
*/
HRESULT WINAPI WsWriteStartElement( WS_XML_WRITER *handle, const WS_XML_STRING *prefix,
--
2.6.2
More information about the wine-patches
mailing list