[PATCH 2/6] riched20: Add creation mode support for ITextDocument_fnOpen.

Jactry jactry92 at gmail.com
Thu Sep 26 08:51:51 CDT 2013


-------------- next part --------------
From c476cc481355cac6ea2593bcc7b6b50b66ec5998 Mon Sep 17 00:00:00 2001
From: Jactry Zeng <jactry92 at gmail.com>
Date: Thu, 26 Sep 2013 20:56:50 +0800
Subject: [PATCH 2/6] riched20: Add creation mode support for
 ITextDocument_fnOpen.
To: wine-patches <wine-patches at winehq.org>
Reply-To: wine-devel <wine-devel at winehq.org>

---
 dlls/riched20/richole.c       | 28 +++++++++++++++++++++++++---
 dlls/riched20/tests/richole.c | 34 +++++++++++++++++-----------------
 2 files changed, 42 insertions(+), 20 deletions(-)

diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
index f1ed898..cb85f10 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;
 
@@ -593,10 +612,13 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags,
     if(V_VT(pVar) != VT_BSTR) return E_INVALIDARG;
 
     FIXME("Don't support UTF-16.\n");
-    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);
+                        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.8.3.4 (Apple Git-47)


More information about the wine-patches mailing list