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); }