oleaut32: Fix SafeArrayGetElement() for FADF_RECORD arrays.

This commit is contained in:
Nikolay Sivov 2014-02-25 08:43:06 +04:00 committed by Alexandre Julliard
parent 4c02dc867f
commit 2ce06e5727
2 changed files with 22 additions and 8 deletions

View File

@ -990,18 +990,26 @@ HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData
else
*lpDest = NULL;
}
else
else if (psa->fFeatures & (FADF_UNKNOWN|FADF_DISPATCH))
{
if (psa->fFeatures & (FADF_UNKNOWN|FADF_DISPATCH))
{
LPUNKNOWN *lpUnknown = lpvSrc;
IUnknown **src_unk = lpvSrc;
IUnknown **dest_unk = pvData;
if (*lpUnknown)
IUnknown_AddRef(*lpUnknown);
}
if (*src_unk)
IUnknown_AddRef(*src_unk);
*dest_unk = *src_unk;
}
else if (psa->fFeatures & FADF_RECORD)
{
IRecordInfo *record;
SafeArrayGetRecordInfo(psa, &record);
hRet = IRecordInfo_RecordCopy(record, lpvSrc, pvData);
IRecordInfo_Release(record);
}
else
/* Copy the data over */
memcpy(pvData, lpvSrc, psa->cbElements);
}
}
SafeArrayUnlock(psa);
}

View File

@ -1203,6 +1203,12 @@ static void test_SafeArrayGetPutElement(void)
ok(hres == S_OK, "got 0x%08x\n", hres);
ok(irec->recordcopy == 1, "got %d\n", irec->recordcopy);
index = 0;
irec->recordcopy = 0;
hres = SafeArrayGetElement(sa, &index, (void*)0xdeadbeef);
ok(hres == S_OK, "got 0x%08x\n", hres);
ok(irec->recordcopy == 1, "got %d\n", irec->recordcopy);
hres = SafeArrayDestroy(sa);
ok(hres == S_OK, "got 0x%08x\n", hres);
ok(irec->ref == 1, "got %d\n", irec->ref);