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)37p__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)46p__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)55p__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)64p__mmfail(unsigned long n) 65 { 66 return 0; 67 } 68