[3/5] propsys: Implement IPropertyStoreCache::GetValueAndState.
Vincent Povirk
madewokherd at gmail.com
Thu May 24 13:18:46 CDT 2012
-------------- next part --------------
From b8f4b77fc813306d1bf4921a693a4974dbc69a41 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Tue, 22 May 2012 15:40:45 -0500
Subject: [PATCH 3/6] propsys: Implement
IPropertyStoreCache::GetValueAndState.
---
dlls/propsys/propstore.c | 27 +++++++++++++++++++++++++--
dlls/propsys/tests/propstore.c | 10 +++++-----
2 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/dlls/propsys/propstore.c b/dlls/propsys/propstore.c
index 00ff701..7c28131 100644
--- a/dlls/propsys/propstore.c
+++ b/dlls/propsys/propstore.c
@@ -351,8 +351,31 @@ static HRESULT WINAPI PropertyStore_GetState(IPropertyStoreCache *iface,
static HRESULT WINAPI PropertyStore_GetValueAndState(IPropertyStoreCache *iface,
REFPROPERTYKEY key, PROPVARIANT *ppropvar, PSC_STATE *pstate)
{
- FIXME("%p,%p,%p,%p: stub\n", iface, key, ppropvar, pstate);
- return E_NOTIMPL;
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+
+ TRACE("%p,%p,%p,%p\n", iface, key, ppropvar, pstate);
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 0, &value);
+
+ if (SUCCEEDED(hr))
+ hr = PropVariantCopy(ppropvar, &value->propvar);
+
+ if (SUCCEEDED(hr))
+ *pstate = value->state;
+
+ LeaveCriticalSection(&This->lock);
+
+ if (FAILED(hr))
+ {
+ PropVariantInit(ppropvar);
+ *pstate = PSC_NORMAL;
+ }
+
+ return hr;
}
static HRESULT WINAPI PropertyStore_SetState(IPropertyStoreCache *iface,
diff --git a/dlls/propsys/tests/propstore.c b/dlls/propsys/tests/propstore.c
index 17cf7f3..ad06ea0 100644
--- a/dlls/propsys/tests/propstore.c
+++ b/dlls/propsys/tests/propstore.c
@@ -138,9 +138,9 @@ static void test_inmemorystore(void)
propvar.vt = VT_I2;
state = 0xdeadbeef;
hr = IPropertyStoreCache_GetValueAndState(propcache, &pkey, &propvar, &state);
- todo_wine ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetValueAndState failed, hr=%x\n", hr);
- todo_wine ok(propvar.vt == VT_EMPTY, "expected VT_EMPTY, got %d\n", propvar.vt);
- todo_wine ok(state == PSC_NORMAL, "expected PSC_NORMAL, got %d\n", state);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetValueAndState failed, hr=%x\n", hr);
+ ok(propvar.vt == VT_EMPTY, "expected VT_EMPTY, got %d\n", propvar.vt);
+ ok(state == PSC_NORMAL, "expected PSC_NORMAL, got %d\n", state);
/* Set state on an unset field */
hr = IPropertyStoreCache_SetState(propcache, &pkey, PSC_NORMAL);
@@ -171,8 +171,8 @@ static void test_inmemorystore(void)
memset(&propvar, 0, sizeof(propvar));
state = 0xdeadbeef;
hr = IPropertyStoreCache_GetValueAndState(propcache, &pkey, &propvar, &state);
- todo_wine ok(hr == S_OK, "GetValueAndState failed, hr=%x\n", hr);
- todo_wine ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
+ ok(hr == S_OK, "GetValueAndState failed, hr=%x\n", hr);
+ ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
todo_wine ok(propvar.u.lVal == 12346, "expected 12346, got %d\n", propvar.vt);
todo_wine ok(state == 5, "expected 5, got %d\n", state);
--
1.7.9.5
More information about the wine-patches
mailing list