MAllocVec will write zeropage if AllocMem fails, fixed version:
APTR MAllocVec( unsigned long byteSize, unsigned long requirements )
{
if (SysBase->LibNode.lib_Version >= 36)
{
return AllocVec(byteSize, requirements);
}
else
{
unsigned long *data;
byteSize += sizeof(unsigned long);
data = (unsigned long *)AllocMem(byteSize, requirements);
if (data)
{
*data = byteSize;
data++;
}
return data;
}
}
Small fix to MFreeVec aswell, in case this routine is to be used as drop-in replacement for FreeVec:
void MFreeVec( APTR memoryBlock )
{
if (SysBase->LibNode.lib_Version >= 36)
{
FreeVec(memoryBlock);
}
else if (MemoryBlock)
{
unsigned long byteSize;
unsigned long *data;
data = (unsigned long*)memoryBlock;
data--;
byteSize = *data;
FreeMem(data, byteSize);
}
}
Excuse me, I just can't help myself. ;-)