1*df930be7Sderaadt /* $NetBSD: alloc.c,v 1.6 1995/03/21 09:02:23 cgd Exp $ */ 2*df930be7Sderaadt 3*df930be7Sderaadt /*- 4*df930be7Sderaadt * Copyright (c) 1983, 1991, 1993 5*df930be7Sderaadt * The Regents of the University of California. All rights reserved. 6*df930be7Sderaadt * 7*df930be7Sderaadt * Redistribution and use in source and binary forms, with or without 8*df930be7Sderaadt * modification, are permitted provided that the following conditions 9*df930be7Sderaadt * are met: 10*df930be7Sderaadt * 1. Redistributions of source code must retain the above copyright 11*df930be7Sderaadt * notice, this list of conditions and the following disclaimer. 12*df930be7Sderaadt * 2. Redistributions in binary form must reproduce the above copyright 13*df930be7Sderaadt * notice, this list of conditions and the following disclaimer in the 14*df930be7Sderaadt * documentation and/or other materials provided with the distribution. 15*df930be7Sderaadt * 3. All advertising materials mentioning features or use of this software 16*df930be7Sderaadt * must display the following acknowledgement: 17*df930be7Sderaadt * This product includes software developed by the University of 18*df930be7Sderaadt * California, Berkeley and its contributors. 19*df930be7Sderaadt * 4. Neither the name of the University nor the names of its contributors 20*df930be7Sderaadt * may be used to endorse or promote products derived from this software 21*df930be7Sderaadt * without specific prior written permission. 22*df930be7Sderaadt * 23*df930be7Sderaadt * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24*df930be7Sderaadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25*df930be7Sderaadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26*df930be7Sderaadt * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27*df930be7Sderaadt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28*df930be7Sderaadt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29*df930be7Sderaadt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30*df930be7Sderaadt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31*df930be7Sderaadt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32*df930be7Sderaadt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33*df930be7Sderaadt * SUCH DAMAGE. 34*df930be7Sderaadt */ 35*df930be7Sderaadt 36*df930be7Sderaadt #ifndef lint 37*df930be7Sderaadt #if 0 38*df930be7Sderaadt static char sccsid[] = "@(#)alloc.c 8.1 (Berkeley) 5/31/93"; 39*df930be7Sderaadt #else 40*df930be7Sderaadt static char rcsid[] = "$NetBSD: alloc.c,v 1.6 1995/03/21 09:02:23 cgd Exp $"; 41*df930be7Sderaadt #endif 42*df930be7Sderaadt #endif /* not lint */ 43*df930be7Sderaadt 44*df930be7Sderaadt #include <sys/types.h> 45*df930be7Sderaadt #include <unistd.h> 46*df930be7Sderaadt #include <stdlib.h> 47*df930be7Sderaadt #if __STDC__ 48*df930be7Sderaadt # include <stdarg.h> 49*df930be7Sderaadt #else 50*df930be7Sderaadt # include <varargs.h> 51*df930be7Sderaadt #endif 52*df930be7Sderaadt 53*df930be7Sderaadt #include "csh.h" 54*df930be7Sderaadt #include "extern.h" 55*df930be7Sderaadt 56*df930be7Sderaadt char *memtop = NULL; /* PWP: top of current memory */ 57*df930be7Sderaadt char *membot = NULL; /* PWP: bottom of allocatable memory */ 58*df930be7Sderaadt 59*df930be7Sderaadt ptr_t 60*df930be7Sderaadt Malloc(n) 61*df930be7Sderaadt size_t n; 62*df930be7Sderaadt { 63*df930be7Sderaadt ptr_t ptr; 64*df930be7Sderaadt 65*df930be7Sderaadt if (membot == NULL) 66*df930be7Sderaadt memtop = membot = sbrk(0); 67*df930be7Sderaadt if ((ptr = malloc(n)) == (ptr_t) 0) { 68*df930be7Sderaadt child++; 69*df930be7Sderaadt stderror(ERR_NOMEM); 70*df930be7Sderaadt } 71*df930be7Sderaadt return (ptr); 72*df930be7Sderaadt } 73*df930be7Sderaadt 74*df930be7Sderaadt ptr_t 75*df930be7Sderaadt Realloc(p, n) 76*df930be7Sderaadt ptr_t p; 77*df930be7Sderaadt size_t n; 78*df930be7Sderaadt { 79*df930be7Sderaadt ptr_t ptr; 80*df930be7Sderaadt 81*df930be7Sderaadt if (membot == NULL) 82*df930be7Sderaadt memtop = membot = sbrk(0); 83*df930be7Sderaadt if ((ptr = realloc(p, n)) == (ptr_t) 0) { 84*df930be7Sderaadt child++; 85*df930be7Sderaadt stderror(ERR_NOMEM); 86*df930be7Sderaadt } 87*df930be7Sderaadt return (ptr); 88*df930be7Sderaadt } 89*df930be7Sderaadt 90*df930be7Sderaadt ptr_t 91*df930be7Sderaadt Calloc(s, n) 92*df930be7Sderaadt size_t s, n; 93*df930be7Sderaadt { 94*df930be7Sderaadt ptr_t ptr; 95*df930be7Sderaadt 96*df930be7Sderaadt if (membot == NULL) 97*df930be7Sderaadt memtop = membot = sbrk(0); 98*df930be7Sderaadt if ((ptr = calloc(s, n)) == (ptr_t) 0) { 99*df930be7Sderaadt child++; 100*df930be7Sderaadt stderror(ERR_NOMEM); 101*df930be7Sderaadt } 102*df930be7Sderaadt 103*df930be7Sderaadt return (ptr); 104*df930be7Sderaadt } 105*df930be7Sderaadt 106*df930be7Sderaadt void 107*df930be7Sderaadt Free(p) 108*df930be7Sderaadt ptr_t p; 109*df930be7Sderaadt { 110*df930be7Sderaadt if (p) 111*df930be7Sderaadt free(p); 112*df930be7Sderaadt } 113*df930be7Sderaadt 114*df930be7Sderaadt /* 115*df930be7Sderaadt * mstats - print out statistics about malloc 116*df930be7Sderaadt * 117*df930be7Sderaadt * Prints two lines of numbers, one showing the length of the free list 118*df930be7Sderaadt * for each size category, the second showing the number of mallocs - 119*df930be7Sderaadt * frees for each size category. 120*df930be7Sderaadt */ 121*df930be7Sderaadt void 122*df930be7Sderaadt /*ARGSUSED*/ 123*df930be7Sderaadt showall(v, t) 124*df930be7Sderaadt Char **v; 125*df930be7Sderaadt struct command *t; 126*df930be7Sderaadt { 127*df930be7Sderaadt memtop = (char *) sbrk(0); 128*df930be7Sderaadt (void) fprintf(cshout, "Allocated memory from 0x%lx to 0x%lx (%ld).\n", 129*df930be7Sderaadt (unsigned long) membot, (unsigned long) memtop, memtop - membot); 130*df930be7Sderaadt } 131