Hans Leidekker : webservices: Implement WsGetHeapProperty.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Sep 14 09:44:35 CDT 2015


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Sep 14 14:04:27 2015 +0200

webservices: Implement WsGetHeapProperty.

---

 dlls/webservices/reader.c         | 23 +++++++++++++
 dlls/webservices/tests/reader.c   | 72 +++++++++++++++++++++++++++++++++++++++
 dlls/webservices/webservices.spec |  2 +-
 3 files changed, 96 insertions(+), 1 deletion(-)

diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 3084fe5..a0123aa 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -200,6 +200,15 @@ static HRESULT set_heap_prop( struct heap *heap, WS_HEAP_PROPERTY_ID id, const v
     return S_OK;
 }
 
+static HRESULT get_heap_prop( struct heap *heap, WS_HEAP_PROPERTY_ID id, void *buf, ULONG size )
+{
+    if (id >= heap->prop_count || size != heap_props[id].size)
+        return E_INVALIDARG;
+
+    memcpy( buf, heap->prop[id].value, heap->prop[id].valueSize );
+    return S_OK;
+}
+
 /**************************************************************************
  *          WsCreateHeap		[webservices.@]
  */
@@ -254,6 +263,20 @@ HRESULT WINAPI WsGetErrorProperty( WS_ERROR *handle, WS_ERROR_PROPERTY_ID id, vo
 }
 
 /**************************************************************************
+ *          WsGetHeapProperty		[webservices.@]
+ */
+HRESULT WINAPI WsGetHeapProperty( WS_HEAP *handle, WS_HEAP_PROPERTY_ID id, void *buf,
+                                  ULONG size, WS_ERROR *error )
+{
+    struct heap *heap = (struct heap *)handle;
+
+    TRACE( "%p %u %p %u %p\n", handle, id, buf, size, error );
+    if (error) FIXME( "ignoring error parameter\n" );
+
+    return get_heap_prop( heap, id, buf, size );
+}
+
+/**************************************************************************
  *          WsSetErrorProperty		[webservices.@]
  */
 HRESULT WINAPI WsSetErrorProperty( WS_ERROR *handle, WS_ERROR_PROPERTY_ID id, const void *value,
diff --git a/dlls/webservices/tests/reader.c b/dlls/webservices/tests/reader.c
index 0db68a0..4b247d9 100644
--- a/dlls/webservices/tests/reader.c
+++ b/dlls/webservices/tests/reader.c
@@ -112,7 +112,79 @@ static void test_WsCreateError(void)
     ok( hr == E_INVALIDARG, "got %08x\n", hr );
 }
 
+static void test_WsCreateHeap(void)
+{
+    HRESULT hr;
+    WS_HEAP *heap;
+    WS_HEAP_PROPERTY prop;
+    SIZE_T max, trim, requested, actual;
+    ULONG size;
+
+    hr = WsCreateHeap( 0, 0, NULL, 0, NULL, NULL );
+    ok( hr == E_INVALIDARG, "got %08x\n", hr );
+
+    heap = NULL;
+    hr = WsCreateHeap( 0, 0, NULL, 0, &heap, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( heap != NULL, "heap not set\n" );
+    WsFreeHeap( heap );
+
+    hr = WsCreateHeap( 1 << 16, 1 << 6, NULL, 0, NULL, NULL );
+    ok( hr == E_INVALIDARG, "got %08x\n", hr );
+
+    heap = NULL;
+    hr = WsCreateHeap( 1 << 16, 0, NULL, 0, &heap, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( heap != NULL, "heap not set\n" );
+    WsFreeHeap( heap );
+
+    hr = WsCreateHeap( 1 << 16, 1 << 6, NULL, 0, &heap, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+
+    max = 0xdeadbeef;
+    size = sizeof(max);
+    hr = WsGetHeapProperty( heap, WS_HEAP_PROPERTY_MAX_SIZE, &max, size, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( max == 1 << 16, "got %u\n", (ULONG)max );
+
+    trim = 0xdeadbeef;
+    size = sizeof(trim);
+    hr = WsGetHeapProperty( heap, WS_HEAP_PROPERTY_TRIM_SIZE, &trim, size, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( trim == 1 << 6, "got %u\n", (ULONG)trim );
+
+    requested = 0xdeadbeef;
+    size = sizeof(requested);
+    hr = WsGetHeapProperty( heap, WS_HEAP_PROPERTY_REQUESTED_SIZE, &requested, size, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( !requested, "got %u\n", (ULONG)requested );
+
+    actual = 0xdeadbeef;
+    size = sizeof(actual);
+    hr = WsGetHeapProperty( heap, WS_HEAP_PROPERTY_ACTUAL_SIZE, &actual, size, NULL );
+    ok( hr == S_OK, "got %08x\n", hr );
+    ok( !actual, "got %u\n", (ULONG)actual );
+
+    actual = 0xdeadbeef;
+    size = sizeof(actual);
+    hr = WsGetHeapProperty( heap, WS_HEAP_PROPERTY_ACTUAL_SIZE + 1, &actual, size, NULL );
+    ok( hr == E_INVALIDARG, "got %08x\n", hr );
+    ok( actual == 0xdeadbeef, "got %u\n", (ULONG)actual );
+    WsFreeHeap( heap );
+
+    max = 1 << 16;
+    prop.id = WS_HEAP_PROPERTY_MAX_SIZE;
+    prop.value = &max;
+    prop.valueSize = sizeof(max);
+    hr = WsCreateHeap( 1 << 16, 1 << 6, &prop, 1, &heap, NULL );
+    ok( hr == E_INVALIDARG, "got %08x\n", hr );
+
+    hr = WsCreateHeap( 1 << 16, 1 << 6, NULL, 1, &heap, NULL );
+    ok( hr == E_INVALIDARG, "got %08x\n", hr );
+}
+
 START_TEST(reader)
 {
     test_WsCreateError();
+    test_WsCreateHeap();
 }
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index 4136dcc..4cb35f6 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -68,7 +68,7 @@
 @ stub WsGetFaultErrorProperty
 @ stub WsGetHeader
 @ stub WsGetHeaderAttributes
-@ stub WsGetHeapProperty
+@ stdcall WsGetHeapProperty(ptr long ptr long ptr)
 @ stub WsGetListenerProperty
 @ stub WsGetMappedHeader
 @ stub WsGetMessageProperty




More information about the wine-cvs mailing list