The ioAssociateCodec routine shown in the following example calls the ioInitCodecopen routine to allocate memory. The next example illustrates how the ioInitCodecopen routine allocates memory and initializes a CODECOPEN structure to be saved in the CODEC control block (CCB).
LONG ioInitCodecopen ( PCCB pccb,
PCODECOPEN pcodecopen)
{
ULONG ulSize;
ENTERCRITX;
pccb->codecopen.ulFlags = pcodecopen->ulFlags;
/* Create and copy Pointers to structures in CODECOPEN structure */
if (pcodecopen->pControlHdr) {
ulSize = *((PULONG)pcodecopen->pControlHdr);
if (!(pccb->codecopen.pControlHdr = (PVOID)HhpAllocMem(hheap,ulSize)))
{
return(MMIO_ERROR);
}
memcpy(pccb->codecopen.pControlHdr, pcodecopen->pControlHdr, ulSize);
}
if (pcodecopen->pSrcHdr) {
ulSize = *((PULONG)pcodecopen->pSrcHdr);
if (!(pccb->codecopen.pSrcHdr = (PVOID)HhpAllocMem(hheap,ulSize)))
{
return(MMIO_ERROR);
}
memcpy(pccb->codecopen.pSrcHdr, pcodecopen->pSrcHdr, ulSize);
}
if (pcodecopen->pDstHdr) {
ulSize = *((PULONG)pcodecopen->pDstHdr);
if (!(pccb->codecopen.pDstHdr = (PVOID)HhpAllocMem(hheap,ulSize)))
{
return(MMIO_ERROR);
}
memcpy(pccb->codecopen.pDstHdr, pcodecopen->pDstHdr, ulSize);
}
if (pcodecopen->pOtherInfo) {
ulSize = *((PULONG)pcodecopen->pOtherInfo);
if (!(pccb->codecopen.pOtherInfo = (PVOID)HhpAllocMem(hheap,ulSize)))
{
return(MMIO_ERROR);
}
memcpy(pccb->codecopen.pOtherInfo, pcodecopen->pOtherInfo, ulSize);
}
EXITCRIT;
return(MMIO_SUCCESS);
}