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