Vincent Povirk : ole32: Implement Revert for transacted storage objects.

Alexandre Julliard julliard at winehq.org
Fri Dec 11 11:04:45 CST 2009


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Fri Dec  4 18:02:59 2009 -0600

ole32: Implement Revert for transacted storage objects.

---

 dlls/ole32/storage32.c       |   18 +++++++++++++++++-
 dlls/ole32/tests/storage32.c |   12 +++---------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index bd755e9..479c2a5 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -4044,7 +4044,23 @@ static HRESULT WINAPI TransactedSnapshotImpl_Commit(
 static HRESULT WINAPI TransactedSnapshotImpl_Revert(
   IStorage*            iface)
 {
-  FIXME("(%p): stub\n", iface);
+  TransactedSnapshotImpl* This = (TransactedSnapshotImpl*) iface;
+  StorageBaseImpl *newSnapshot;
+  HRESULT hr;
+
+  TRACE("(%p)\n", iface);
+
+  /* Create a new copy of the parent data. */
+  hr = CreateSnapshotFile(This->transactedParent, &newSnapshot);
+  if (FAILED(hr)) return hr;
+
+  /* Destroy the open objects. */
+  StorageBaseImpl_DeleteAll(&This->base);
+
+  /* Replace our current snapshot. */
+  IStorage_Release((IStorage*)This->snapshot);
+  This->snapshot = newSnapshot;
+
   return S_OK;
 }
 
diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c
index 0494369..f89a787 100644
--- a/dlls/ole32/tests/storage32.c
+++ b/dlls/ole32/tests/storage32.c
@@ -1195,7 +1195,6 @@ static void test_revert(void)
     r = IStorage_Revert(stg);
 
     /* all open objects become invalid */
-    todo_wine {
     r = IStream_Write(stm, "this shouldn't work\n", 20, NULL);
     ok(r==STG_E_REVERTED, "IStream_Write should fail %08x\n", r);
 
@@ -1207,7 +1206,6 @@ static void test_revert(void)
 
     r = IStorage_Stat(stg3, &statstg, STATFLAG_NONAME);
     ok(r==STG_E_REVERTED, "IStorage_Stat should fail %08x\n", r);
-    }
 
     IStream_Release(stm);
     IStream_Release(stm2);
@@ -1226,17 +1224,13 @@ static void test_revert(void)
     r = IStorage_OpenStorage(stg, stmname, NULL, STGM_TRANSACTED|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, NULL, 0, &stg2 );
     ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream failed %08x\n", r);
 
-    todo_wine {
     r = IStorage_OpenStream(stg, stmname, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm );
     ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream should fail %08x\n", r);
-    }
     if (r == S_OK)
         IStream_Release(stm);
 
-    todo_wine {
     r = IStorage_OpenStorage(stg, stgname2, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, NULL, 0, &stg2 );
     ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStorage should fail %08x\n", r);
-    }
     if (r == S_OK)
         IStorage_Release(stg2);
 
@@ -1258,7 +1252,7 @@ static void test_revert(void)
             IStorage_Release(stg3);
 
         r = IStorage_OpenStorage(stg2, stgname2, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, NULL, 0, &stg3 );
-        todo_wine ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStorage should fail %08x\n", r);
+        ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStorage should fail %08x\n", r);
         if (r == S_OK)
             IStorage_Release(stg3);
 
@@ -1398,7 +1392,7 @@ static void test_nonroot_transacted(void)
             IStream_Release(stm);
 
         r = IStorage_OpenStream(stg2, stmname2, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm );
-        todo_wine ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream should fail %08x\n", r);
+        ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream should fail %08x\n", r);
         if (r == S_OK)
             IStream_Release(stm);
 
@@ -1460,7 +1454,7 @@ static void test_nonroot_transacted(void)
             IStream_Release(stm);
 
         r = IStorage_OpenStream(stg2, stmname2, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm );
-        todo_wine ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream should fail %08x\n", r);
+        ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream should fail %08x\n", r);
         if (r == S_OK)
             IStream_Release(stm);
 




More information about the wine-cvs mailing list