Hans Leidekker : webservices: Add support for namespace attributes in the reader.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 23 11:24:21 CST 2016


Module: wine
Branch: master
Commit: e0ff2f930ddc3811e090efa5702bb1d6ea351b84
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e0ff2f930ddc3811e090efa5702bb1d6ea351b84

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Feb 23 13:11:54 2016 +0100

webservices: Add support for namespace attributes in the reader.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/webservices/reader.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 2abb82a..92a8184 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -862,10 +862,12 @@ static HRESULT parse_name( const unsigned char *str, unsigned int len,
 
 static HRESULT read_attribute( struct reader *reader, WS_XML_ATTRIBUTE **ret )
 {
+    static const WS_XML_STRING xmlns = {5, (BYTE *)"xmlns"};
     WS_XML_ATTRIBUTE *attr;
     WS_XML_UTF8_TEXT *text;
     unsigned int len = 0, ch, skip, quote;
     const unsigned char *start;
+    WS_XML_STRING *prefix, *localname;
     HRESULT hr = WS_E_INVALID_FORMAT;
 
     if (!(attr = heap_alloc_zero( sizeof(*attr) ))) return E_OUTOFMEMORY;
@@ -880,9 +882,19 @@ static HRESULT read_attribute( struct reader *reader, WS_XML_ATTRIBUTE **ret )
     }
     if (!len) goto error;
 
-    if ((hr = parse_name( start, len, &attr->prefix, &attr->localName )) != S_OK) goto error;
+    if ((hr = parse_name( start, len, &prefix, &localname )) != S_OK) goto error;
     hr = E_OUTOFMEMORY;
-    if (!(attr->ns = alloc_xml_string( NULL, 0 ))) goto error;
+    if (WsXmlStringEquals( prefix, &xmlns, NULL ) == S_OK)
+    {
+        attr->isXmlNs   = 1;
+        if (!(attr->prefix = alloc_xml_string( localname->bytes, localname->length ))) goto error;
+        attr->localName = localname;
+    }
+    else
+    {
+        attr->prefix    = prefix;
+        attr->localName = localname;
+    }
 
     hr = WS_E_INVALID_FORMAT;
     read_skip_whitespace( reader );
@@ -906,8 +918,18 @@ static HRESULT read_attribute( struct reader *reader, WS_XML_ATTRIBUTE **ret )
     read_skip( reader, 1 );
 
     hr = E_OUTOFMEMORY;
-    if (!(text = alloc_utf8_text( start, len ))) goto error;
-    attr->value = &text->text;
+    if (attr->isXmlNs)
+    {
+        if (!(attr->ns = alloc_xml_string( start, len ))) goto error;
+        if (!(text = alloc_utf8_text( NULL, 0 ))) goto error;
+        attr->value = &text->text;
+    }
+    else
+    {
+        if (!(attr->ns = alloc_xml_string( NULL, 0 ))) goto error;
+        if (!(text = alloc_utf8_text( start, len ))) goto error;
+        attr->value = &text->text;
+    }
     attr->singleQuote = (quote == '\'');
 
     *ret = attr;




More information about the wine-cvs mailing list