Mike McCormack : ole32:
Add a test showing what STGM_TRANSACTED does for streams.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 31 04:32:09 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 24e69d544bb5858e2eda6ccaed112b7eaf30f0ff
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=24e69d544bb5858e2eda6ccaed112b7eaf30f0ff
Author: Mike McCormack <mike at codeweavers.com>
Date: Tue Aug 1 01:00:25 2006 +0900
ole32: Add a test showing what STGM_TRANSACTED does for streams.
---
dlls/ole32/storage32.c | 7 ++---
dlls/ole32/tests/storage32.c | 59 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index 520689b..5119571 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -323,7 +323,8 @@ static HRESULT WINAPI StorageBaseImpl_Op
/*
* Validate the STGM flags
*/
- if ( FAILED( validateSTGM(grfMode) ))
+ if ( FAILED( validateSTGM(grfMode) ) ||
+ STGM_SHARE_MODE(grfMode) != STGM_SHARE_EXCLUSIVE)
{
res = STG_E_INVALIDFLAG;
goto end;
@@ -332,9 +333,7 @@ static HRESULT WINAPI StorageBaseImpl_Op
/*
* As documented.
*/
- if ( STGM_SHARE_MODE(grfMode) != STGM_SHARE_EXCLUSIVE ||
- (grfMode & STGM_DELETEONRELEASE) ||
- (grfMode & STGM_TRANSACTED) )
+ if ( (grfMode & STGM_DELETEONRELEASE) || (grfMode & STGM_TRANSACTED) )
{
res = STG_E_INVALIDFUNCTION;
goto end;
diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c
index 0ba82f2..f3b9b27 100644
--- a/dlls/ole32/tests/storage32.c
+++ b/dlls/ole32/tests/storage32.c
@@ -835,6 +835,64 @@ static void test_streamenum(void)
DeleteFileW(filename);
}
+static void test_transact(void)
+{
+ static const WCHAR szPrefix[] = { 's','t','g',0 };
+ static const WCHAR szDot[] = { '.',0 };
+ WCHAR filename[MAX_PATH];
+ IStorage *stg = NULL;
+ HRESULT r;
+ IStream *stm = NULL;
+ static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 };
+
+ if(!GetTempFileNameW(szDot, szPrefix, 0, filename))
+ return;
+
+ DeleteFileW(filename);
+
+ /* create the file */
+ r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE |
+ STGM_READWRITE |STGM_TRANSACTED, 0, &stg);
+ ok(r==S_OK, "StgCreateDocfile failed\n");
+
+ /* now create a stream, but don't commit it */
+ r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm );
+ ok(r==S_OK, "IStorage->CreateStream failed\n");
+
+ r = IStream_Release(stm);
+
+ IStorage_Release(stg);
+
+ stm = NULL;
+ stg = NULL;
+ r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_NONE | STGM_READ | STGM_TRANSACTED, NULL, 0, &stg);
+ ok(r==S_OK, "StgOpenStorage failed\n");
+
+ if (!stg)
+ return;
+
+ r = IStorage_OpenStream(stg, stmname, NULL, STGM_SHARE_DENY_NONE|STGM_READ, 0, &stm );
+ ok(r==STG_E_INVALIDFLAG, "IStorage->OpenStream failed %08lx\n", r);
+
+ r = IStorage_OpenStream(stg, stmname, NULL, STGM_DELETEONRELEASE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm );
+ ok(r==STG_E_INVALIDFUNCTION, "IStorage->OpenStream failed %08lx\n", r);
+
+ r = IStorage_OpenStream(stg, stmname, NULL, STGM_TRANSACTED|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm );
+ ok(r==STG_E_INVALIDFUNCTION, "IStorage->OpenStream failed %08lx\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 %08lx\n", r);
+ }
+
+ if (stm)
+ r = IStream_Release(stm);
+ IStorage_Release(stg);
+
+ r = DeleteFileW(filename);
+ ok( r == TRUE, "deleted file\n");
+}
+
START_TEST(storage32)
{
test_hglobal_storage_stat();
@@ -844,4 +902,5 @@ START_TEST(storage32)
test_storage_suminfo();
test_storage_refcount();
test_streamenum();
+ test_transact();
}
More information about the wine-cvs
mailing list