Module: wine Branch: master Commit: 91e95e125e457a9977e845279edb54e16cd81091 URL: http://source.winehq.org/git/wine.git/?a=commit;h=91e95e125e457a9977e845279e...
Author: Vincent Povirk vincent@codeweavers.com Date: Tue May 22 15:46:23 2012 -0500
propsys: Implement IPropertyStoreCache::SetValueAndState.
---
dlls/propsys/propstore.c | 21 +++++++++++++++++++-- dlls/propsys/tests/propstore.c | 16 ++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/dlls/propsys/propstore.c b/dlls/propsys/propstore.c index c9df65e..e438ce3 100644 --- a/dlls/propsys/propstore.c +++ b/dlls/propsys/propstore.c @@ -402,8 +402,25 @@ static HRESULT WINAPI PropertyStore_SetState(IPropertyStoreCache *iface, static HRESULT WINAPI PropertyStore_SetValueAndState(IPropertyStoreCache *iface, REFPROPERTYKEY key, const PROPVARIANT *ppropvar, PSC_STATE state) { - FIXME("%p,%p,%p,%d: stub\n", iface, key, ppropvar, state); - return E_NOTIMPL; + PropertyStore *This = impl_from_IPropertyStoreCache(iface); + propstore_value *value; + HRESULT hr; + + TRACE("%p,%p,%p,%d\n", iface, key, ppropvar, state); + + EnterCriticalSection(&This->lock); + + hr = PropertyStore_LookupValue(This, key, 1, &value); + + if (SUCCEEDED(hr)) + hr = PropVariantCopy(&value->propvar, ppropvar); + + if (SUCCEEDED(hr)) + value->state = state; + + LeaveCriticalSection(&This->lock); + + return hr; }
static const IPropertyStoreCacheVtbl PropertyStore_Vtbl = { diff --git a/dlls/propsys/tests/propstore.c b/dlls/propsys/tests/propstore.c index b6c1e5a..5c1b021 100644 --- a/dlls/propsys/tests/propstore.c +++ b/dlls/propsys/tests/propstore.c @@ -166,15 +166,15 @@ static void test_inmemorystore(void) propvar.vt = VT_I4; propvar.u.lVal = 12346; hr = IPropertyStoreCache_SetValueAndState(propcache, &pkey, &propvar, 5); - todo_wine ok(hr == S_OK, "SetValueAndState failed, hr=%x\n", hr); + ok(hr == S_OK, "SetValueAndState failed, hr=%x\n", hr);
memset(&propvar, 0, sizeof(propvar)); state = 0xdeadbeef; hr = IPropertyStoreCache_GetValueAndState(propcache, &pkey, &propvar, &state); 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); + ok(propvar.u.lVal == 12346, "expected 12346, got %d\n", propvar.vt); + ok(state == 5, "expected 5, got %d\n", state);
/* Set new field with state */ pkey.fmtid = PKEY_WineTest; @@ -183,15 +183,15 @@ static void test_inmemorystore(void) propvar.vt = VT_I4; propvar.u.lVal = 12347; hr = IPropertyStoreCache_SetValueAndState(propcache, &pkey, &propvar, PSC_DIRTY); - todo_wine ok(hr == S_OK, "SetValueAndState failed, hr=%x\n", hr); + ok(hr == S_OK, "SetValueAndState failed, hr=%x\n", hr);
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); - todo_wine ok(propvar.u.lVal == 12347, "expected 12347, got %d\n", propvar.vt); - todo_wine ok(state == PSC_DIRTY, "expected PSC_DIRTY, got %d\n", state); + ok(hr == S_OK, "GetValueAndState failed, hr=%x\n", hr); + ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt); + ok(propvar.u.lVal == 12347, "expected 12347, got %d\n", propvar.vt); + ok(state == PSC_DIRTY, "expected PSC_DIRTY, got %d\n", state);
IPropertyStoreCache_Release(propcache); }