1 /*
2  * $Id: mm.c,v 1.1 2005-09-18 22:05:42 dhmunro Exp $
3  *
4  * load default function pointers for pstdlib.h interface
5  * p_mminit and p_mmdebug override these defaults
6  * purpose of this file is so if p_mminit or p_mmdebug never called,
7  *   code should run with system memory manager without loading bmm
8  */
9 /* Copyright (c) 2005, The Regents of the University of California.
10  * All rights reserved.
11  * This file is part of yorick (http://yorick.sourceforge.net).
12  * Read the accompanying LICENSE file for details.
13  */
14 
15 #include "config.h"
16 #include "pstdlib.h"
17 
18 static void *p__malloc(size_t);
19 static void  p__free(void *);
20 static void *p__realloc(void *, size_t);
21 
22 void *(*p_malloc)(size_t)= &p__malloc;
23 void  (*p_free)(void *)=   &p__free;
24 void *(*p_realloc)(void *, size_t)= &p__realloc;
25 
26 static void *p__mmfail(unsigned long n);
27 void *(*p_mmfail)(unsigned long n)= &p__mmfail;
28 
29 long p_nallocs = 0;
30 long p_nfrees = 0;
31 long p_nsmall = 0;
32 long p_asmall = 0;
33 
34 p_twkspc p_wkspc;
35 
36 static void *
p__malloc(size_t n)37 p__malloc(size_t n)
38 {
39   void *p = malloc(n>0? n : 1);
40   if (!p) return p_mmfail(n>0? n : 1);
41   p_nallocs++;
42   return p;
43 }
44 
45 static void
p__free(void * p)46 p__free(void *p)
47 {
48   if (p) {
49     p_nfrees++;
50     free(p);
51   }
52 }
53 
54 static void *
p__realloc(void * p,size_t n)55 p__realloc(void *p, size_t n)
56 {
57   if (n<=0) n = 1;
58   p = p? realloc(p,n) : malloc(n);
59   return p? p : p_mmfail(n);
60 }
61 
62 /* ARGSUSED */
63 static void *
p__mmfail(unsigned long n)64 p__mmfail(unsigned long n)
65 {
66   return 0;
67 }
68