Module: wine Branch: refs/heads/master Commit: 11e4b21a308930300edee16be006615cf5ed904c URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=11e4b21a308930300edee16b...
Author: Mike McCormack mike@codeweavers.com Date: Tue Apr 18 17:18:51 2006 +0900
ole32: More tests and fixes for STGM_PRIORITY.
---
dlls/ole32/storage32.c | 8 +++++++- dlls/ole32/tests/storage32.c | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index ef6b248..5e6696c 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -5911,8 +5911,14 @@ HRESULT WINAPI StgOpenStorage( /* STGM_PRIORITY implies exclusive access */ if (grfMode & STGM_PRIORITY) { + if (grfMode & (STGM_TRANSACTED|STGM_SIMPLE|STGM_NOSCRATCH|STGM_NOSNAPSHOT)) + return STG_E_INVALIDFLAG; + if (grfMode & STGM_DELETEONRELEASE) + return STG_E_INVALIDFUNCTION; + if(STGM_ACCESS_MODE(grfMode) != STGM_READ) + return STG_E_INVALIDFLAG; grfMode &= ~0xf0; /* remove the existing sharing mode */ - grfMode |= STGM_SHARE_EXCLUSIVE; + grfMode |= STGM_SHARE_DENY_WRITE; }
/* diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index d9668a5..e1f40f2 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -478,9 +478,32 @@ static void test_open_storage(void) stg = NULL; r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stg); ok(r == S_OK, "should succeed\n"); + r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stg2); + ok(r == S_OK, "should succeed\n"); + if (stg2) + IStorage_Release(stg2); if (stg) IStorage_Release(stg);
+ stg = NULL; + r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_READWRITE, NULL, 0, &stg); + ok(r == STG_E_INVALIDFLAG, "should fail\n"); + + r = StgOpenStorage( filename, NULL, STGM_TRANSACTED | STGM_PRIORITY, NULL, 0, &stg); + ok(r == STG_E_INVALIDFLAG, "should fail\n"); + + r = StgOpenStorage( filename, NULL, STGM_SIMPLE | STGM_PRIORITY, NULL, 0, &stg); + ok(r == STG_E_INVALIDFLAG, "should fail\n"); + + r = StgOpenStorage( filename, NULL, STGM_DELETEONRELEASE | STGM_PRIORITY, NULL, 0, &stg); + ok(r == STG_E_INVALIDFUNCTION, "should fail\n"); + + r = StgOpenStorage( filename, NULL, STGM_NOSCRATCH | STGM_PRIORITY, NULL, 0, &stg); + ok(r == STG_E_INVALIDFLAG, "should fail\n"); + + r = StgOpenStorage( filename, NULL, STGM_NOSNAPSHOT | STGM_PRIORITY, NULL, 0, &stg); + ok(r == STG_E_INVALIDFLAG, "should fail\n"); + r = DeleteFileW(filename); ok(r, "file didn't exist\n"); }