Nikolay Sivov : ole2disp: Implement SafeArrayAccessData()/ SafeArrayUnaccessData().

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 12 06:45:23 CDT 2016


Module: wine
Branch: stable
Commit: 336bc46c10c621a25a079f44e38aa3d8377bc5bb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=336bc46c10c621a25a079f44e38aa3d8377bc5bb

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Jan 14 23:34:17 2016 +0300

ole2disp: Implement SafeArrayAccessData()/SafeArrayUnaccessData().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit cfbac8d2ed4b79b42952e9cc99f656cfe967088a)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/ole2disp.dll16/ole2disp.c          | 43 +++++++++++++++++++++++++++++----
 dlls/ole2disp.dll16/ole2disp.dll16.spec |  4 +--
 2 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/dlls/ole2disp.dll16/ole2disp.c b/dlls/ole2disp.dll16/ole2disp.c
index af6f03c..d61b5e8 100644
--- a/dlls/ole2disp.dll16/ole2disp.c
+++ b/dlls/ole2disp.dll16/ole2disp.c
@@ -89,6 +89,15 @@ static ULONG safearray_getcellcount(const SAFEARRAY16 *sa)
     return cells;
 }
 
+static HRESULT safearray_lock(SAFEARRAY16 *sa)
+{
+    if (sa->cLocks == 0xffff)
+        return E_UNEXPECTED;
+
+    sa->cLocks++;
+    return S_OK;
+}
+
 /******************************************************************************
  *    SafeArrayGetDim [OLE2DISP.17]
  */
@@ -117,11 +126,7 @@ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa)
     if (!sa)
         return E_INVALIDARG16;
 
-    if (sa->cLocks == 0xffff)
-        return E_UNEXPECTED;
-
-    sa->cLocks++;
-    return S_OK;
+    return safearray_lock(sa);
 }
 
 /******************************************************************************
@@ -142,6 +147,34 @@ HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa)
 }
 
 /******************************************************************************
+ *    SafeArrayAccessData [OLE2DISP.23]
+ */
+HRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data)
+{
+    HRESULT hr;
+
+    TRACE("(%p, %p)\n", sa, data);
+
+    /* arguments are not tested, it crashes if any of them is NULL */
+
+    hr = safearray_lock(sa);
+    if (FAILED(hr))
+        return hr;
+
+    *data = sa->pvData;
+    return S_OK;
+}
+
+/******************************************************************************
+ *    SafeArrayUnaccessData [OLE2DISP.24]
+ */
+HRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa)
+{
+    TRACE("(%p)\n", sa);
+    return SafeArrayUnlock16(sa);
+}
+
+/******************************************************************************
  *    SafeArrayAllocDescriptor [OLE2DISP.38]
  */
 HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret)
diff --git a/dlls/ole2disp.dll16/ole2disp.dll16.spec b/dlls/ole2disp.dll16/ole2disp.dll16.spec
index b0db920..4ee52e1 100644
--- a/dlls/ole2disp.dll16/ole2disp.dll16.spec
+++ b/dlls/ole2disp.dll16/ole2disp.dll16.spec
@@ -20,8 +20,8 @@
 20 stub SAFEARRAYGETLBOUND
 21 pascal SafeArrayLock(ptr) SafeArrayLock16
 22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16
-23 stub SAFEARRAYACCESSDATA
-24 stub SAFEARRAYUNACCESSDATA
+23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16
+24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16
 25 stub SAFEARRAYGETELEMENT
 26 stub SAFEARRAYPUTELEMENT
 27 stub SAFEARRAYCOPY




More information about the wine-cvs mailing list