From: Mohamad Al-Jaf mohamadaljaf@gmail.com
--- dlls/wintypes/buffer.c | 10 ++++++++-- dlls/wintypes/tests/wintypes.c | 4 ---- 2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/dlls/wintypes/buffer.c b/dlls/wintypes/buffer.c index 2e2e4ceced0..da59d28aa86 100644 --- a/dlls/wintypes/buffer.c +++ b/dlls/wintypes/buffer.c @@ -211,8 +211,14 @@ static HRESULT WINAPI buffer_get_Length( IBuffer *iface, UINT32 *value )
static HRESULT WINAPI buffer_put_Length( IBuffer *iface, UINT32 value ) { - FIXME( "iface %p, value %u stub!\n", iface, value ); - return E_NOTIMPL; + struct buffer *impl = impl_from_IBuffer( iface ); + + TRACE( "iface %p, value %u\n", iface, value ); + + if (value > impl->capacity) return E_INVALIDARG; + + impl->length = value; + return S_OK; }
static const struct IBufferVtbl buffer_vtbl = diff --git a/dlls/wintypes/tests/wintypes.c b/dlls/wintypes/tests/wintypes.c index 53ef796d539..1ceab853591 100644 --- a/dlls/wintypes/tests/wintypes.c +++ b/dlls/wintypes/tests/wintypes.c @@ -217,7 +217,6 @@ static void test_IBufferStatics(void) ok(length == 0, "IBuffer_get_Length returned length %u.\n", length);
hr = IBuffer_put_Length(buffer, 1); - todo_wine ok(hr == E_INVALIDARG, "IBuffer_put_Length failed, hr %#lx.\n", hr);
IBuffer_Release(buffer); @@ -246,7 +245,6 @@ static void test_IBufferStatics(void) ok(length == 0, "IBuffer_get_Length returned length %u.\n", length);
hr = IBuffer_put_Length(buffer, 1); - todo_wine ok(hr == S_OK, "IBuffer_put_Length failed, hr %#lx.\n", hr); length = 0xdeadbeef; hr = IBuffer_get_Length(buffer, &length); @@ -256,11 +254,9 @@ static void test_IBufferStatics(void) ok(length == 1, "IBuffer_get_Length returned length %u.\n", length);
hr = IBuffer_put_Length(buffer, 0xdeadbeef + 1); - todo_wine ok(hr == E_INVALIDARG, "IBuffer_put_Length failed, hr %#lx.\n", hr);
hr = IBuffer_put_Length(buffer, 0xdeadbeef); - todo_wine ok(hr == S_OK, "IBuffer_put_Length failed, hr %#lx.\n", hr); length = 0; hr = IBuffer_get_Length(buffer, &length);