[5/5] propsys: Implement IPropertyStoreCache::SetValueAndState.

Vincent Povirk madewokherd at gmail.com
Thu May 24 13:20:47 CDT 2012


-------------- next part --------------
From 9d1c8c28d0578309cc0f9a3a2fd56cae9dc80cb8 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Tue, 22 May 2012 15:46:23 -0500
Subject: [PATCH 5/6] 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);
 }
-- 
1.7.9.5


More information about the wine-patches mailing list