/*
* Copyright (C) 1995-1997 Christopher D. Granz
*
* This header may not be removed.
*
* Refer to the file "License" included in this package for further
* information and before using any of the following.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "emi.h"
/*
* Functions
*/
/*
* Allocates some memory and checks for failure.
*/
void *alloc_mem( register size_t rsMem )
{
register void *pMem;
if ( ( pMem = calloc( 1, rsMem ) ) == NULL )
{
fprintf( stderr,
"Fatal error: Cannot allocate %ld bytes of memory.\n",
(long) rsMem );
#ifdef DEBUG
abort( );
#else
exit( 1 );
#endif
}
return ( pMem );
}
/*
* Reallocates some memory and checks for failure.
*/
void *realloc_mem( register void *pMem, register size_t rsMem )
{
if ( ( pMem = realloc( pMem, rsMem ) ) == NULL )
{
fprintf( stderr,
"Fatal error: Cannot reallocate %ld bytes of memory.\n",
(long) rsMem );
#ifdef DEBUG
abort( );
#else
exit( 1 );
#endif
}
return ( pMem );
}
/*
* Free some memory and set the pointer to NULL.
*/
void free_mem( register void **ppMem )
{
if ( ppMem != NULL && *ppMem != NULL )
{
free( *ppMem );
*ppMem = NULL;
}
}
/*
* Initialize some memory.
*/
void zero_out( register void *pMem, register size_t rsMem )
{
register byte *pBMem = pMem;
register size_t rs = 0;
while ( rs < rsMem )
pBMem[rs++] = 0;
}
/*
* Duplicates a string in memory.
*/
char *str_dup( register char *pStr )
{
register int riLen;
if ( pStr == NULL || pStr[0] == '\0' )
return ( EMPTY_STRING );
riLen = strlen( pStr );
if ( riLen >= MAX_STRING )
riLen = ( MAX_STRING - 1 );
return ( strncpy( alloc_mem( riLen + 1 ), pStr, riLen ) );
}
/*
* End of memory.c
*/