[8/8] webservices: Reset writer state in WsSetOutput and WsSetOutputToBuffer.

Hans Leidekker hans at codeweavers.com
Tue Nov 10 03:46:41 CST 2015


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/webservices/writer.c | 59 ++++++++++++++++++++++++++++++-----------------
 1 file changed, 38 insertions(+), 21 deletions(-)

diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index fc83d3d..e8b5fad 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -138,6 +138,13 @@ static void write_insert_eof( struct writer *writer, struct node *eof )
     writer->current = eof;
 }
 
+static void write_insert_bof( struct writer *writer, struct node *bof )
+{
+    writer->root->parent = bof;
+    list_add_tail( &bof->children, &writer->root->entry );
+    writer->current = writer->root = bof;
+}
+
 static void write_insert_node( struct writer *writer, struct node *node )
 {
     node->parent = writer->current;
@@ -310,6 +317,7 @@ HRESULT WINAPI WsSetOutput( WS_XML_WRITER *handle, const WS_XML_WRITER_ENCODING
                             ULONG count, WS_ERROR *error )
 {
     struct writer *writer = (struct writer *)handle;
+    struct node *node;
     HRESULT hr;
     ULONG i;
 
@@ -324,37 +332,41 @@ HRESULT WINAPI WsSetOutput( WS_XML_WRITER *handle, const WS_XML_WRITER_ENCODING
         if (hr != S_OK) return hr;
     }
 
+    if ((hr = write_init_state( writer )) != S_OK) return hr;
+
     switch (encoding->encodingType)
     {
-        case WS_XML_WRITER_ENCODING_TYPE_TEXT:
+    case WS_XML_WRITER_ENCODING_TYPE_TEXT:
+    {
+        WS_XML_WRITER_TEXT_ENCODING *text = (WS_XML_WRITER_TEXT_ENCODING *)encoding;
+        if (text->charSet != WS_CHARSET_UTF8)
         {
-            WS_XML_WRITER_TEXT_ENCODING *text = (WS_XML_WRITER_TEXT_ENCODING *)encoding;
-            if (text->charSet != WS_CHARSET_UTF8)
-            {
-                FIXME( "charset %u not supported\n", text->charSet );
-                return E_NOTIMPL;
-            }
-            break;
-        }
-        default:
-            FIXME( "encoding type %u not supported\n", encoding->encodingType );
+            FIXME( "charset %u not supported\n", text->charSet );
             return E_NOTIMPL;
+        }
+        break;
+    }
+    default:
+        FIXME( "encoding type %u not supported\n", encoding->encodingType );
+        return E_NOTIMPL;
     }
     switch (output->outputType)
     {
-        case WS_XML_WRITER_OUTPUT_TYPE_BUFFER:
-        {
-            struct xmlbuf *xmlbuf;
+    case WS_XML_WRITER_OUTPUT_TYPE_BUFFER:
+    {
+        struct xmlbuf *xmlbuf;
 
-            if (!(xmlbuf = alloc_xmlbuf( writer->output_heap ))) return E_OUTOFMEMORY;
-            set_output_buffer( writer, xmlbuf );
-            break;
-        }
-        default:
-            FIXME( "output type %u not supported\n", output->outputType );
-            return E_NOTIMPL;
+        if (!(xmlbuf = alloc_xmlbuf( writer->output_heap ))) return E_OUTOFMEMORY;
+        set_output_buffer( writer, xmlbuf );
+        break;
+    }
+    default:
+        FIXME( "output type %u not supported\n", output->outputType );
+        return E_NOTIMPL;
     }
 
+    if (!(node = alloc_node( WS_XML_NODE_TYPE_BOF ))) return E_OUTOFMEMORY;
+    write_insert_bof( writer, node );
     return S_OK;
 }
 
@@ -367,6 +379,7 @@ HRESULT WINAPI WsSetOutputToBuffer( WS_XML_WRITER *handle, WS_XML_BUFFER *buffer
 {
     struct writer *writer = (struct writer *)handle;
     struct xmlbuf *xmlbuf = (struct xmlbuf *)buffer;
+    struct node *node;
     HRESULT hr;
     ULONG i;
 
@@ -381,7 +394,11 @@ HRESULT WINAPI WsSetOutputToBuffer( WS_XML_WRITER *handle, WS_XML_BUFFER *buffer
         if (hr != S_OK) return hr;
     }
 
+    if ((hr = write_init_state( writer )) != S_OK) return hr;
     set_output_buffer( writer, xmlbuf );
+
+    if (!(node = alloc_node( WS_XML_NODE_TYPE_BOF ))) return E_OUTOFMEMORY;
+    write_insert_bof( writer, node );
     return S_OK;
 }
 
-- 
2.6.2




More information about the wine-patches mailing list