diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c index 1755d9b..d3003e9 100644 --- a/dlls/msi/tests/package.c +++ b/dlls/msi/tests/package.c @@ -6367,62 +6367,62 @@ struct access_res struct access_res create[16] = { - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE } + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS } }; struct access_res create_commit[16] = { - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE } + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS } }; struct access_res create_close[16] = { - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE } + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS } }; static void _test_file_access(LPCSTR file, struct access_res *ares, DWORD line) @@ -6450,37 +6450,15 @@ static void _test_file_access(LPCSTR file, struct access_res *ares, DWORD line) hfile = CreateFileA(file, access, share, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); lasterr = GetLastError(); - if (ares[idx].todo) - { - todo_wine - { - ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, - "(%d, handle, %d): Expected %d, got %d\n", - line, idx, ares[idx].gothandle, - (hfile != INVALID_HANDLE_VALUE)); - } - } - else - ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, - "(%d, handle, %d): Expected %d, got %d\n", - line, idx, ares[idx].gothandle, - (hfile != INVALID_HANDLE_VALUE)); - - if (ares[idx].todo) - { - todo_wine - { - ok(lasterr == ares[idx].lasterr, - "(%d, lasterr, %d): Expected %d, got %d\n", - line, idx, ares[idx].lasterr, lasterr); - } - } - else - { - ok(lasterr == ares[idx].lasterr, - "(%d, lasterr, %d): Expected %d, got %d\n", - line, idx, ares[idx].lasterr, lasterr); - } + + ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, + "(%d, handle, %d): Expected %d, got %d\n", + line, idx, ares[idx].gothandle, + (hfile != INVALID_HANDLE_VALUE)); + + ok(lasterr == ares[idx].lasterr, + "(%d, lasterr, %d): Expected %d, got %d\n", + line, idx, ares[idx].lasterr, lasterr); CloseHandle(hfile); idx++; diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 663ff4f..705585b 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -5727,7 +5727,7 @@ HRESULT WINAPI StgCreateDocfile( /* * Interpret the STGM value grfMode */ - shareMode = GetShareModeFromSTGM(grfMode); + shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; accessMode = GetAccessModeFromSTGM(grfMode); if (grfMode & STGM_DELETEONRELEASE) @@ -5735,6 +5735,9 @@ HRESULT WINAPI StgCreateDocfile( else fileAttributes = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS; + if (STGM_SHARE_MODE(grfMode) && !(grfMode & STGM_SHARE_DENY_NONE)) + FIXME("Storage share mode not implemented.\n"); + if (grfMode & STGM_TRANSACTED) FIXME("Transacted mode not implemented.\n"); diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index d0b60e8..ded1860 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -1003,67 +1003,66 @@ struct access_res { BOOL gothandle; DWORD lasterr; - BOOL todo; }; struct access_res create[16] = { - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE } + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS } }; struct access_res create_commit[16] = { - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { FALSE, ERROR_SHARING_VIOLATION, FALSE }, - { TRUE, ERROR_SUCCESS, TRUE } + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { FALSE, ERROR_SHARING_VIOLATION }, + { TRUE, ERROR_SUCCESS } }; struct access_res create_close[16] = { - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE }, - { TRUE, ERROR_SUCCESS, FALSE } + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS }, + { TRUE, ERROR_SUCCESS } }; static void _test_file_access(LPCSTR file, struct access_res *ares, DWORD line) @@ -1091,37 +1090,15 @@ static void _test_file_access(LPCSTR file, struct access_res *ares, DWORD line) hfile = CreateFileA(file, access, share, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); lasterr = GetLastError(); - if (ares[idx].todo) - { - todo_wine - { - ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, - "(%d, handle, %d): Expected %d, got %d\n", - line, idx, ares[idx].gothandle, - (hfile != INVALID_HANDLE_VALUE)); - } - } - else - ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, - "(%d, handle, %d): Expected %d, got %d\n", - line, idx, ares[idx].gothandle, - (hfile != INVALID_HANDLE_VALUE)); - - if (ares[idx].todo) - { - todo_wine - { - ok(lasterr == ares[idx].lasterr, - "(%d, lasterr, %d): Expected %d, got %d\n", - line, idx, ares[idx].lasterr, lasterr); - } - } - else - { - ok(lasterr == ares[idx].lasterr, - "(%d, lasterr, %d): Expected %d, got %d\n", - line, idx, ares[idx].lasterr, lasterr); - } + + ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, + "(%d, handle, %d): Expected %d, got %d\n", + line, idx, ares[idx].gothandle, + (hfile != INVALID_HANDLE_VALUE)); + + ok(lasterr == ares[idx].lasterr, + "(%d, lasterr, %d): Expected %d, got %d\n", + line, idx, ares[idx].lasterr, lasterr); CloseHandle(hfile); idx++; @@ -1176,6 +1153,62 @@ static void test_access(void) DeleteFileA("winetest"); + /* STGM_SHARE_DENY_NONE */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_DENY_NONE | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); + + /* STGM_SHARE_DENY_READ */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_DENY_READ | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); + + /* STGM_SHARE_DENY_WRITE */ + + hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | + STGM_SHARE_DENY_WRITE | STGM_TRANSACTED, 0, &stg); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create); + + hr = IStorage_Commit(stg, STGC_DEFAULT); + ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); + + test_file_access("winetest", create_commit); + + IStorage_Release(stg); + + test_file_access("winetest", create_close); + + DeleteFileA("winetest"); } START_TEST(storage32) -- 1.5.4.3