StgOpenStorage(..., STGM_READ | STGM_TRANSACTED, ...) should succeed Used e.g with CueCards2000
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Mon Nov 15 10:38:11 CST 2010
---
dlls/ole32/storage32.c | 9 +++++++++
dlls/ole32/tests/storage32.c | 10 +++++++++-
2 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index 311f2ae..0ea02f6 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -7546,6 +7546,7 @@ HRESULT WINAPI StgOpenStorage(
case STGM_SHARE_DENY_WRITE:
break;
default:
+ TRACE("Invalid Share mode\n");
hr = STG_E_INVALIDFLAG;
goto end;
}
@@ -7553,6 +7554,7 @@ HRESULT WINAPI StgOpenStorage(
if ( FAILED( validateSTGM(grfMode) ) ||
(grfMode&STGM_CREATE))
{
+ TRACE("Invalid Create mode\n");
hr = STG_E_INVALIDFLAG;
goto end;
}
@@ -7562,6 +7564,7 @@ HRESULT WINAPI StgOpenStorage(
STGM_ACCESS_MODE(grfMode) == STGM_READWRITE &&
!(grfMode&STGM_TRANSACTED) )
{
+ TRACE("Invalid Transaction mode\n");
hr = STG_E_INVALIDFLAG;
goto end;
}
@@ -7962,6 +7965,9 @@ static HRESULT validateSTGM(DWORD stgm)
return E_FAIL;
}
+ if (stgm == STGM_TRANSACTED)
+ return S_OK;
+
switch (share)
{
case STGM_SHARE_DENY_NONE:
@@ -8022,6 +8028,9 @@ static HRESULT validateSTGM(DWORD stgm)
*/
static DWORD GetShareModeFromSTGM(DWORD stgm)
{
+ if (stgm == STGM_TRANSACTED)
+ return FILE_SHARE_READ | FILE_SHARE_WRITE;
+
switch (STGM_SHARE_MODE(stgm))
{
case STGM_SHARE_DENY_NONE:
diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c
index 9bd8f33..1fa427e 100644
--- a/dlls/ole32/tests/storage32.c
+++ b/dlls/ole32/tests/storage32.c
@@ -522,7 +522,15 @@ static void test_open_storage(void)
r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_WRITE | STGM_READWRITE, NULL, 0, &stg);
ok(r==STG_E_INVALIDFLAG, "StgOpenStorage failed\n");
- /* open it for real */
+ /* open it for real */
+ r = StgOpenStorage( filename, NULL, STGM_READ | STGM_TRANSACTED, NULL, 0, &stg); /* CueCards2000 */
+ ok(r==S_OK, "STGM_READ | STGM_TRANSACTED should succeed\n");
+ if(stg)
+ {
+ r = IStorage_Release(stg);
+ ok(r == 0, "wrong ref count\n");
+ }
+
r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_NONE | STGM_READ | STGM_TRANSACTED, NULL, 0, &stg); /* XLViewer 97/2000 */
ok(r==S_OK, "StgOpenStorage failed\n");
if(stg)
--
1.7.1
More information about the wine-patches
mailing list