home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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;
- }
- }
- *********/