void *HGSMIHeapAlloc (HGSMIHEAP *pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo) { if (pHeap->u.hPtr == NIL_RTHEAPSIMPLE) { return NULL; } size_t cbAlloc = HGSMIBufferRequiredSize (cbData); HGSMIBUFFERHEADER *pHeader = (HGSMIBUFFERHEADER *)HGSMIHeapBufferAlloc (pHeap, cbAlloc); if (!pHeader) return NULL; hgsmiBufferInitializeSingle (&pHeap->area, pHeader, cbData, u8Channel, u16ChannelInfo); return HGSMIBufferData (pHeader); }
void *HGSMIHeapAlloc(HGSMIHEAP *pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo) { HGSMISIZE cbAlloc = HGSMIBufferRequiredSize(cbData); HGSMIBUFFERHEADER *pHeader = (HGSMIBUFFERHEADER *)HGSMIHeapBufferAlloc(pHeap, cbAlloc); if (pHeader) { HGSMIOFFSET offBuffer = HGSMIBufferInitializeSingle(HGSMIHeapArea(pHeap), pHeader, cbAlloc, u8Channel, u16ChannelInfo); if (offBuffer == HGSMIOFFSET_VOID) { HGSMIHeapBufferFree(pHeap, pHeader); pHeader = NULL; } } return pHeader? HGSMIBufferDataFromPtr(pHeader): NULL; }