xref: /openbsd-src/bin/csh/alloc.c (revision df930be708d50e9715f173caa26ffe1b7599b157)
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