[PATCH 3/6] riched20: Add creation mode support for ITextDocument_fnOpen.
Jactry Zeng
jactry92 at gmail.com
Tue Feb 11 12:05:55 CST 2014
-------------- next part --------------
From 0cfe8c3e68eb376037ecdb5b4858fa191cd2fd2e Mon Sep 17 00:00:00 2001
From: Jactry Zeng <jactry92 at gmail.com>
Date: Tue, 11 Feb 2014 23:43:54 +0800
Subject: [PATCH 3/6] riched20: Add creation mode support for
ITextDocument_fnOpen.
---
dlls/riched20/richole.c | 27 ++++++++++++++++++++++++---
dlls/riched20/tests/richole.c | 30 +++++++++++++++---------------
2 files changed, 39 insertions(+), 18 deletions(-)
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
index 1998851..1d936d2 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 buf;
static const char RTFheader[] = "{\\rtf";
@@ -593,10 +612,12 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags,
if(V_VT(pVar) != VT_BSTR) return E_INVALIDARG;
- FIXME("Partial stub! Don't support flag: 0x%x\n", Flags);
+ FIXME("Partial stub! Without support of access and share mode.\n");
+
+ 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);
+ FILE_SHARE_WRITE|FILE_SHARE_DELETE, 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 e347eed..bc73629 100644
--- a/dlls/riched20/tests/richole.c
+++ b/dlls/riched20/tests/richole.c
@@ -234,57 +234,57 @@ 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);
@@ -301,7 +301,7 @@ static void test_ITextDocument_Open(void)
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.8.3.2
More information about the wine-patches
mailing list