xref: /csrg-svn/contrib/sc/xmalloc.c (revision 45338)
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*45338Sbostic xmalloc(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*45338Sbostic xfree(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*45338Sbostic fatal(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