#include "config.h" #ifdef MEM_CHECK #include "os.h" #include "externs.h" #include "mem_check.h" MEM *my_check = NULL; void add_check (char *ref) { MEM *loop; for (loop = my_check; loop; loop = loop->next) { if (!string_compare (ref, loop->ref_name)) { loop->ref_count++; return; } } loop = (MEM *) malloc (sizeof (MEM)); loop->ref_name = ref; loop->ref_count = 1; loop->next = my_check; my_check = loop; add_check ("mem_check"); return; } void del_check (char *ref) { MEM *loop; for (loop = my_check; loop; loop = loop->next) { if (!string_compare (loop->ref_name, ref)) { loop->ref_count--; if (!loop->ref_count) { rebuild_check (); del_check ("mem_check"); } return; } } fprintf (stderr, "ERROR: Tried deleteing a check that was never added! :%s\n", ref); } void rebuild_check (void) { MEM *point, *next, *new = NULL; point = my_check; while (point) { next = point->next; if (point->ref_count) { point->next = new; new = point; } else { free ((char *) point); } point = next; } my_check = new; } void list_mem_check (dbref player) { MEM *loop; for (loop = my_check; loop; loop = loop->next) { notify (player, tprintf ("%s : %d", loop->ref_name, loop->ref_count)); } } #endif /* MEM_CHECK */