[5/6] webservices: Use a WS_BYTES structure to store XML buffer data.

Hans Leidekker hans at codeweavers.com
Mon May 15 02:59:23 CDT 2017


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/webservices/heap.c                | 10 +++++-----
 dlls/webservices/reader.c              |  4 ++--
 dlls/webservices/webservices_private.h |  3 +--
 dlls/webservices/writer.c              | 30 +++++++++++++++---------------
 4 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/dlls/webservices/heap.c b/dlls/webservices/heap.c
index 9e8e0bd..7a4b3b4 100644
--- a/dlls/webservices/heap.c
+++ b/dlls/webservices/heap.c
@@ -320,21 +320,21 @@ struct xmlbuf *alloc_xmlbuf( WS_HEAP *heap )
     struct xmlbuf *ret;
 
     if (!(ret = ws_alloc( heap, sizeof(*ret) ))) return NULL;
-    if (!(ret->ptr = ws_alloc( heap, XML_BUFFER_INITIAL_ALLOCATED_SIZE )))
+    if (!(ret->bytes.bytes = ws_alloc( heap, XML_BUFFER_INITIAL_ALLOCATED_SIZE )))
     {
         ws_free( heap, ret, sizeof(*ret) );
         return NULL;
     }
-    ret->heap           = heap;
-    ret->size_allocated = XML_BUFFER_INITIAL_ALLOCATED_SIZE;
-    ret->size           = 0;
+    ret->heap         = heap;
+    ret->size         = XML_BUFFER_INITIAL_ALLOCATED_SIZE;
+    ret->bytes.length = 0;
     return ret;
 }
 
 void free_xmlbuf( struct xmlbuf *xmlbuf )
 {
     if (!xmlbuf) return;
-    ws_free( xmlbuf->heap, xmlbuf->ptr, xmlbuf->size_allocated );
+    ws_free( xmlbuf->heap, xmlbuf->bytes.bytes, xmlbuf->size );
     ws_free( xmlbuf->heap, xmlbuf, sizeof(*xmlbuf) );
 }
 
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 4e7211f..1d85f00 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -4662,12 +4662,12 @@ HRESULT WINAPI WsSetInputToBuffer( WS_XML_READER *handle, WS_XML_BUFFER *buffer,
 
     if ((hr = init_reader( reader )) != S_OK) goto done;
 
-    charset = detect_charset( xmlbuf->ptr, xmlbuf->size, &offset );
+    charset = detect_charset( xmlbuf->bytes.bytes, xmlbuf->bytes.length, &offset );
     hr = prop_set( reader->prop, reader->prop_count, WS_XML_READER_PROPERTY_CHARSET, &charset,
                    sizeof(charset) );
     if (hr != S_OK) goto done;
 
-    set_input_buffer( reader, xmlbuf, (const unsigned char *)xmlbuf->ptr + offset, xmlbuf->size - offset );
+    set_input_buffer( reader, xmlbuf, xmlbuf->bytes.bytes + offset, xmlbuf->bytes.length - offset );
     if (!(node = alloc_node( WS_XML_NODE_TYPE_BOF ))) hr = E_OUTOFMEMORY;
     else read_insert_bof( reader, node );
 
diff --git a/dlls/webservices/webservices_private.h b/dlls/webservices/webservices_private.h
index 0a1a953..75dfdb9 100644
--- a/dlls/webservices/webservices_private.h
+++ b/dlls/webservices/webservices_private.h
@@ -21,8 +21,7 @@
 struct xmlbuf
 {
     WS_HEAP *heap;
-    void    *ptr;
-    SIZE_T   size_allocated;
+    WS_BYTES bytes;
     SIZE_T   size;
 };
 
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 5902f45..b9ddb39 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -288,8 +288,8 @@ HRESULT WINAPI WsGetWriterProperty( WS_XML_WRITER *handle, WS_XML_WRITER_PROPERT
         if (size != sizeof(*bytes)) hr = E_INVALIDARG;
         else
         {
-            bytes->bytes  = writer->output_buf->ptr;
-            bytes->length = writer->output_buf->size;
+            bytes->bytes  = writer->output_buf->bytes.bytes;
+            bytes->length = writer->output_buf->bytes.length;
         }
         break;
     }
@@ -310,7 +310,7 @@ static void set_output_buffer( struct writer *writer, struct xmlbuf *xmlbuf )
     }
     writer->output_buf   = xmlbuf;
     writer->output_type  = WS_XML_WRITER_OUTPUT_TYPE_BUFFER;
-    writer->write_bufptr = xmlbuf->ptr;
+    writer->write_bufptr = xmlbuf->bytes.bytes;
     writer->write_pos    = 0;
 }
 
@@ -441,16 +441,16 @@ static HRESULT write_grow_buffer( struct writer *writer, ULONG size )
     SIZE_T new_size;
     void *tmp;
 
-    if (buf->size_allocated >= writer->write_pos + size)
+    if (buf->size >= writer->write_pos + size)
     {
-        buf->size = writer->write_pos + size;
+        buf->bytes.length = writer->write_pos + size;
         return S_OK;
     }
-    new_size = max( buf->size_allocated * 2, writer->write_pos + size );
-    if (!(tmp = ws_realloc( buf->heap, buf->ptr, buf->size_allocated, new_size ))) return WS_E_QUOTA_EXCEEDED;
-    writer->write_bufptr = buf->ptr = tmp;
-    buf->size_allocated = new_size;
-    buf->size = writer->write_pos + size;
+    new_size = max( buf->size * 2, writer->write_pos + size );
+    if (!(tmp = ws_realloc( buf->heap, buf->bytes.bytes, buf->size, new_size ))) return WS_E_QUOTA_EXCEEDED;
+    writer->write_bufptr = buf->bytes.bytes = tmp;
+    buf->size = new_size;
+    buf->bytes.length = writer->write_pos + size;
     return S_OK;
 }
 
@@ -2820,8 +2820,8 @@ HRESULT WINAPI WsWriteXmlBuffer( WS_XML_WRITER *handle, WS_XML_BUFFER *buffer, W
     }
 
     if ((hr = write_flush( writer )) != S_OK) goto done;
-    if ((hr = write_grow_buffer( writer, xmlbuf->size )) != S_OK) goto done;
-    write_bytes( writer, xmlbuf->ptr, xmlbuf->size );
+    if ((hr = write_grow_buffer( writer, xmlbuf->bytes.length )) != S_OK) goto done;
+    write_bytes( writer, xmlbuf->bytes.bytes, xmlbuf->bytes.length );
 
 done:
     LeaveCriticalSection( &writer->cs );
@@ -2869,12 +2869,12 @@ HRESULT WINAPI WsWriteXmlBufferToBytes( WS_XML_WRITER *handle, WS_XML_BUFFER *bu
         if (hr != S_OK) goto done;
     }
 
-    if (!(buf = ws_alloc( heap, xmlbuf->size ))) hr = WS_E_QUOTA_EXCEEDED;
+    if (!(buf = ws_alloc( heap, xmlbuf->bytes.length ))) hr = WS_E_QUOTA_EXCEEDED;
     else
     {
-        memcpy( buf, xmlbuf->ptr, xmlbuf->size );
+        memcpy( buf, xmlbuf->bytes.bytes, xmlbuf->bytes.length );
         *bytes = buf;
-        *size = xmlbuf->size;
+        *size = xmlbuf->bytes.length;
     }
 
 done:
-- 
2.1.4




More information about the wine-patches mailing list