/* Start time: Mon Dec 9 11:06:12 EST 2002 Stop time: Mon Dec 9 11:08:49 EST 2002 -- Timing -- I figure if I can do this in under 3 minutes, you should be able to do it in under 12 minutes. */ #include typedef struct flist { int size; int checksum; struct flist *flink; struct flist *blink; } Flist; extern Flist *free_list; void free(void *p) { int *x; Flist *f; x = (int *) p; /* First, set f to point 8 bytes before p */ x -= 2; f = (Flist *) x; if (f->checksum != 1234) { /* Check the checksum, and dump core if */ x = NULL; /* is not 1234 */ *x = 0; } f->checksum = 1235; /* Set it to 1235 */ f->blink = NULL; /* Put it in the front of the freelist */ f->flink = free_list; if (f->flink != NULL) f->flink->blink = f; free_list = f; return; }