1*45338Sbostic /* 2*45338Sbostic * A safer saner malloc, for careless programmers 3*45338Sbostic * $Revision: 6.8 $ 4*45338Sbostic */ 5*45338Sbostic 6*45338Sbostic #include <stdio.h> 7*45338Sbostic #include <curses.h> 8*45338Sbostic #include "sc.h" 9*45338Sbostic 10*45338Sbostic extern char *malloc(); 11*45338Sbostic 12*45338Sbostic #ifdef SYSV3 13*45338Sbostic extern void free(); 14*45338Sbostic extern void exit(); 15*45338Sbostic #endif 16*45338Sbostic 17*45338Sbostic char * xmalloc(n)18*45338Sbosticxmalloc(n) 19*45338Sbostic unsigned n; 20*45338Sbostic { 21*45338Sbostic register char *ptr; 22*45338Sbostic 23*45338Sbostic if ((ptr = malloc(n + sizeof(double))) == NULL) 24*45338Sbostic fatal("xmalloc: no memory"); 25*45338Sbostic *((int *) ptr) = 12345; /* magic number */ 26*45338Sbostic return(ptr + sizeof(double)); 27*45338Sbostic } 28*45338Sbostic xfree(p)29*45338Sbosticxfree(p) 30*45338Sbostic char *p; 31*45338Sbostic { 32*45338Sbostic if (p == NULL) 33*45338Sbostic fatal("xfree: NULL"); 34*45338Sbostic p -= sizeof(double); 35*45338Sbostic if (*((int *) p) != 12345) 36*45338Sbostic fatal("xfree: storage not malloc'ed"); 37*45338Sbostic free(p); 38*45338Sbostic } 39*45338Sbostic fatal(str)40*45338Sbosticfatal(str) 41*45338Sbostic char *str; 42*45338Sbostic { 43*45338Sbostic deraw(); 44*45338Sbostic (void) fprintf(stderr,"%s\n", str); 45*45338Sbostic exit(1); 46*45338Sbostic } 47