home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Otherware
/
Otherware_1_SB_Development.iso
/
amiga
/
misc
/
icalc.lzh
/
icalc
/
src
/
memory.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-09-29
|
1KB
|
77 lines
/*
* icalc - complex-expression parser
*
* Memory routines to ease garbage collection when errors occur
* with parsing.
*
* (C) Martin W Scott, 1991.
*/
#include <stdlib.h>
#include "memory.h"
static RemKey **gkey;
void *emalloc(n) /* check return from malloc() */
unsigned n;
{
extern void execerror(char *, char *);
char *p;
if ((p = malloc(n)) == NULL)
execerror("out of memory", NULL);
return p;
}
RemKey **rem_setkey(k) /* set key to be used for malloc's */
RemKey **k;
{
RemKey **oldkey = gkey;
gkey = k;
return oldkey;
}
void *rem_malloc(size) /* allocate memory, tag to list */
unsigned int size;
{
RemKey *k;
k = emalloc(sizeof(RemKey));
k->ptr = emalloc(size);
k->next = *gkey;
*gkey = k;
return k->ptr;
}
void rem_freeall() /* free all memory associated with a key */
{
RemKey *k;
while (*gkey)
{
k = (*gkey)->next;
free((*gkey)->ptr);
free(*gkey);
*gkey = k;
}
}
/* just free 'remember' info */
/* not being used in current implementation */
/********
void rem_freelinks()
{
RemKey *k;
while (*gkey)
{
k = (*gkey)->next;
free(*gkey);
*gkey = k;
}
}
*********/