From 8e4c922e6885cf81decfa63c030382a7e5311395 Mon Sep 17 00:00:00 2001 From: Jactry Zeng Date: Sat, 7 Sep 2013 16:45:07 +0800 Subject: [PATCH 2/6] riched20: Add creation mode support for ITextDocument_fnOpen. --- dlls/riched20/richole.c | 25 +++++++++++++++++++++++-- dlls/riched20/tests/richole.c | 34 +++++++++++++++++----------------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c index e7da55f..bd8aa60 100644 --- a/dlls/riched20/richole.c +++ b/dlls/riched20/richole.c @@ -577,6 +577,25 @@ ITextDocument_fnNew(ITextDocument* me) return E_NOTIMPL; } +static DWORD get_open_creation_mode(LONG Flags) +{ + switch(Flags & 0xf0) + { + case tomCreateNew: + return CREATE_NEW; + case tomCreateAlways: + return CREATE_ALWAYS; + case tomOpenExisting: + return OPEN_EXISTING; + case tomOpenAlways: + return OPEN_ALWAYS; + case tomTruncateExisting: + return TRUNCATE_EXISTING; + default: + return OPEN_ALWAYS; + } +} + static HRESULT WINAPI ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags, LONG CodePage) @@ -584,7 +603,7 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags, IRichEditOleImpl *This = impl_from_ITextDocument(me); HANDLE hFile; - DWORD dwReadSize, size; + DWORD dwReadSize, size, creationMode; SETTEXTEX settextex; LPSTR chBuffer; @@ -592,9 +611,11 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags, if(V_VT(pVar) != VT_BSTR) return E_INVALIDARG; + creationMode = get_open_creation_mode(Flags); + hFile = CreateFileW(V_BSTR(pVar), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ| FILE_SHARE_WRITE|FILE_SHARE_DELETE, - NULL, OPEN_EXISTING, 0, NULL); + NULL, creationMode, 0, NULL); if(hFile == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError()); diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c index 6f2ed17..72dd06e 100644 --- a/dlls/riched20/tests/richole.c +++ b/dlls/riched20/tests/richole.c @@ -225,74 +225,74 @@ static void test_ITextDocument_Open(void) create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomCreateAlways, CP_ACP); - todo_wine ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_ACP\n"); - todo_wine ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); + ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_ACP\n"); + ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomCreateAlways, CP_UTF8); - todo_wine ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_UTF8\n"); - todo_wine ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); + ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_UTF8\n"); + ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomOpenAlways, CP_ACP); - todo_wine ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_ACP\n"); - todo_wine ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); + ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_ACP\n"); + ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomOpenAlways, CP_UTF8); - todo_wine ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_UTF8\n"); - todo_wine ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); + ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_UTF8\n"); + ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomCreateNew, CP_ACP); - todo_wine ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_ACP\n"); - todo_wine ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); + ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_ACP\n"); + ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomCreateNew, CP_UTF8); - todo_wine ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_UTF8\n"); - todo_wine ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); + ok(hres == S_OK, "ITextDocument_Open should success Codepage:CP_UTF8\n"); + ok(is_existing_file(filename), "ITextDocument_Open should create a file\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); touch_file(filename); hres = ITextDocument_Open(txtDoc, &testfile, tomCreateNew, CP_ACP); - todo_wine ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_EXISTS), "ITextDocument_Open should fail Codepage:CP_ACP\n"); + ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_EXISTS), "ITextDocument_Open should fail Codepage:CP_ACP\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); touch_file(filename); hres = ITextDocument_Open(txtDoc, &testfile, tomCreateNew, CP_UTF8); - todo_wine ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_EXISTS), "ITextDocument_Open should fail Codepage:CP_UTF8\n"); + ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_EXISTS), "ITextDocument_Open should fail Codepage:CP_UTF8\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomOpenExisting, CP_ACP); - todo_wine ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "ITextDocument_Open should fail Codepage:CP_ACP\n"); + ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "ITextDocument_Open should fail Codepage:CP_ACP\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); create_interfaces(&w, &reOle, &txtDoc, &txtSel); hres = ITextDocument_Open(txtDoc, &testfile, tomOpenExisting, CP_UTF8); - todo_wine ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "ITextDocument_Open should fail Codepage:CP_UTF8\n"); + ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "ITextDocument_Open should fail Codepage:CP_UTF8\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); create_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); ITextDocument_Open(txtDoc, &testfile, tomText, CP_ACP); - todo_wine ok(is_existing_file(filename) == TRUE, "a file should be created default\n"); + ok(is_existing_file(filename) == TRUE, "a file should be created default\n"); release_interfaces(&w, &reOle, &txtDoc, &txtSel); DeleteFileW(filename); -- 1.7.10.4