Module: wine Branch: master Commit: cc8c36c44c7b761eaa4bf3e1c461999f12e5a48b URL: http://source.winehq.org/git/wine.git/?a=commit;h=cc8c36c44c7b761eaa4bf3e1c4...
Author: Huw Davies huw@codeweavers.com Date: Mon Jun 1 11:06:10 2009 +0100
ole32: In simple mode, CreateStream with the STGM_CREATE flag should fail.
---
dlls/ole32/storage32.c | 3 +++ dlls/ole32/tests/storage32.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 670d751..212c1ff 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -992,6 +992,9 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream( return STG_E_ACCESSDENIED; }
+ if(This->ancestorStorage->base.openFlags & STGM_SIMPLE) + if(grfMode & STGM_CREATE) return STG_E_INVALIDFLAG; + /* * Initialize the out parameter */ diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 55f7145..b426d94 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -1343,6 +1343,39 @@ void test_readonly(void) DeleteFileA("winetest"); }
+static void test_simple(void) +{ + /* Tests for STGM_SIMPLE mode */ + + static const WCHAR szPrefix[] = { 's','t','g',0 }; + static const WCHAR szDot[] = { '.',0 }; + WCHAR filename[MAX_PATH]; + IStorage *stg; + HRESULT r; + IStream *stm; + static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 }; + + if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) + return; + + DeleteFileW(filename); + + r = StgCreateDocfile( filename, STGM_SIMPLE | STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, &stg); + ok(r == S_OK, "got %08x\n", r); + + r = IStorage_CreateStream(stg, stmname, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm); + ok(r == STG_E_INVALIDFLAG, "got %08x\n", r); + r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm); + ok(r == S_OK, "got %08x\n", r); + + IStream_Release(stm); + + IStorage_Commit(stg, STGC_DEFAULT); + IStorage_Release(stg); + + DeleteFileW(filename); +} + START_TEST(storage32) { test_hglobal_storage_stat(); @@ -1357,4 +1390,5 @@ START_TEST(storage32) test_access(); test_writeclassstg(); test_readonly(); + test_simple(); }