/* MMEM.C
*
* MIDAS Sound System memory handling routines
*
* $Id: mmem.c,v 1.4 1997/01/16 18:41:59 pekangas Exp $
*
* Copyright 1996,1997 Housemarque Inc.
*
* This file is part of the MIDAS Sound System, and may only be
* used, modified and distributed under the terms of the MIDAS
* Sound System license, LICENSE.TXT. By continuing to use,
* modify or distribute this file you indicate that you have
* read the license and understand and accept it fully.
*/
#include <stdlib.h>
#if defined(__WATCOMC__) || defined(__VC32__)
#include <malloc.h>
#else
#ifdef __LINUX__
#include <malloc.h>
#else
#include <alloc.h>
#endif
#endif
#include "lang.h"
#include "errors.h"
#include "mmem.h"
RCSID(const char *mmem_rcsid = "$Id: mmem.c,v 1.4 1997/01/16 18:41:59 pekangas Exp $";)
/****************************************************************************\
*
* Function: int memAlloc(unsigned len, void **blk);
*
* Description: Allocates a block of conventional memory
*
* Input: unsigned len Memory block length in bytes
* void **blk Pointer to memory block pointer
*
* Returns: MIDAS error code.
* Pointer to allocated block stored in *blk, NULL if error.
*
\****************************************************************************/
int CALLING memAlloc(unsigned len, void **blk)
{
#ifdef DEBUG
unsigned cnt, *b;
#endif
/* check that block length is not zero: */
if ( len == 0 )
{
ERROR(errInvalidBlock, ID_memAlloc);
return errInvalidBlock;
}
#ifdef DEBUG
len = (len + 3) & 0xFFFFFFFC;
cnt = len >> 2;
#endif
/* allocate memory: */
*blk = malloc(len);
if ( *blk == NULL )
{
/* Memory allocation failed - check if heap is corrupted. If not,
assume out of memory: */
#ifndef __LINUX__
#if defined(__WATCOMC__) || defined(__VC32__)
if ( _heapchk() != _HEAPOK )
#else
if ( heapcheck() != _HEAPOK )
#endif
{
ERROR(errHeapCorrupted, ID_memAlloc);
return errHeapCorrupted;
}
else
#endif
{
ERROR(errOutOfMemory, ID_memAlloc);
return errOutOfMemory;
}
}
#ifdef DEBUG
b = (unsigned*) *blk;
while ( cnt )
{
*(b++) = 0xDEADBEEF;
cnt--;
}
#endif
/* memory allocated successfully */
return OK;
}
/****************************************************************************\
*
* Function: int memFree(void *blk);
*
* Description: Deallocates a memory block allocated with memAlloc()
*
* Input: void *blk Memory block pointer
*
* Returns: MIDAS error code.
*
\****************************************************************************/
int CALLING memFree(void *blk)
{
/* Check that block pointer is not NULL: */
if ( blk == NULL )
{
ERROR(errInvalidBlock, ID_memFree);
return errInvalidBlock;
}
/* deallocate block: */
free(blk);
/* deallocation successful */
return OK;
}
/*
* $Log: mmem.c,v $
* Revision 1.4 1997/01/16 18:41:59 pekangas
* Changed copyright messages to Housemarque
*
* Revision 1.3 1996/07/13 18:21:05 pekangas
* Fixed to compile with Visual C
*
* Revision 1.2 1996/05/24 16:20:36 jpaana
* Fixed for Linux
*
* Revision 1.1 1996/05/22 20:49:33 pekangas
* Initial revision
*
*/