ole2disp: Implement SafeArrayAccessData()/SafeArrayUnaccessData().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2016-01-14 23:34:17 +03:00 committed by Alexandre Julliard
parent 668e975446
commit cfbac8d2ed
2 changed files with 40 additions and 7 deletions

View File

@ -89,6 +89,15 @@ static ULONG safearray_getcellcount(const SAFEARRAY16 *sa)
return cells; return cells;
} }
static HRESULT safearray_lock(SAFEARRAY16 *sa)
{
if (sa->cLocks == 0xffff)
return E_UNEXPECTED;
sa->cLocks++;
return S_OK;
}
/****************************************************************************** /******************************************************************************
* SafeArrayGetDim [OLE2DISP.17] * SafeArrayGetDim [OLE2DISP.17]
*/ */
@ -117,11 +126,7 @@ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa)
if (!sa) if (!sa)
return E_INVALIDARG16; return E_INVALIDARG16;
if (sa->cLocks == 0xffff) return safearray_lock(sa);
return E_UNEXPECTED;
sa->cLocks++;
return S_OK;
} }
/****************************************************************************** /******************************************************************************
@ -141,6 +146,34 @@ HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa)
return S_OK; return S_OK;
} }
/******************************************************************************
* 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] * SafeArrayAllocDescriptor [OLE2DISP.38]
*/ */

View File

@ -20,8 +20,8 @@
20 stub SAFEARRAYGETLBOUND 20 stub SAFEARRAYGETLBOUND
21 pascal SafeArrayLock(ptr) SafeArrayLock16 21 pascal SafeArrayLock(ptr) SafeArrayLock16
22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16 22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16
23 stub SAFEARRAYACCESSDATA 23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16
24 stub SAFEARRAYUNACCESSDATA 24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16
25 stub SAFEARRAYGETELEMENT 25 stub SAFEARRAYGETELEMENT
26 stub SAFEARRAYPUTELEMENT 26 stub SAFEARRAYPUTELEMENT
27 stub SAFEARRAYCOPY 27 stub SAFEARRAYCOPY