[PATCH 4/6] riched20: Add access mode support for ITextDocument_fnOpen.

Jactry Zeng jactry92 at gmail.com
Tue Feb 11 12:06:09 CST 2014


-------------- next part --------------
From c36b5612b29c52400c8ac50c96e786712a240f24 Mon Sep 17 00:00:00 2001
From: Jactry Zeng <jactry92 at gmail.com>
Date: Tue, 11 Feb 2014 23:44:40 +0800
Subject: [PATCH 4/6] riched20: Add access mode support for
 ITextDocument_fnOpen.

---
 dlls/riched20/richole.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
index 1d936d2..725862a 100644
--- a/dlls/riched20/richole.c
+++ b/dlls/riched20/richole.c
@@ -596,6 +596,23 @@ static DWORD get_open_creation_mode(LONG Flags)
     }
 }
 
+static DWORD get_open_access_mode(LONG Flags)
+{
+  switch(Flags & 0xf00)
+    {
+    case tomReadOnly:
+      return GENERIC_READ;
+    case tomReadOnly|tomShareDenyRead:
+      return GENERIC_READ;
+    case tomReadOnly|tomShareDenyWrite:
+      return GENERIC_READ;
+    case tomReadOnly|tomShareDenyRead|tomShareDenyWrite:
+      return GENERIC_READ;
+    default:
+      return GENERIC_READ|GENERIC_WRITE;
+    }
+}
+
 static HRESULT WINAPI
 ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags,
     LONG CodePage)
@@ -603,7 +620,7 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags,
     IRichEditOleImpl *This = impl_from_ITextDocument(me);
 
     HANDLE hFile;
-    DWORD dwReadsize, size, creationMode;
+    DWORD dwReadsize, size, creationMode, accessMode;
     SETTEXTEX settextex;
     LPSTR buf;
     static const char RTFheader[] = "{\\rtf";
@@ -612,11 +629,12 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags,
 
     if(V_VT(pVar) != VT_BSTR) return E_INVALIDARG;
 
-    FIXME("Partial stub! Without support of access and share mode.\n");
+    FIXME("Partial stub! Without support of share mode.\n");
 
     creationMode = get_open_creation_mode(Flags);
+    accessMode = get_open_access_mode(Flags);
 
-    hFile = CreateFileW(V_BSTR(pVar), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|
+    hFile = CreateFileW(V_BSTR(pVar), accessMode, FILE_SHARE_READ|
                         FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, creationMode, 0, NULL);
 
     if(hFile == INVALID_HANDLE_VALUE)
-- 
1.8.3.2



More information about the wine-patches mailing list