memalloc.h revision 17987
1198090Srdivacky/*-
2198090Srdivacky * Copyright (c) 1991, 1993
3198090Srdivacky *	The Regents of the University of California.  All rights reserved.
4198090Srdivacky *
5198090Srdivacky * This code is derived from software contributed to Berkeley by
6198090Srdivacky * Kenneth Almquist.
7198090Srdivacky *
8198090Srdivacky * Redistribution and use in source and binary forms, with or without
9198090Srdivacky * modification, are permitted provided that the following conditions
10198090Srdivacky * are met:
11198090Srdivacky * 1. Redistributions of source code must retain the above copyright
12198090Srdivacky *    notice, this list of conditions and the following disclaimer.
13198090Srdivacky * 2. Redistributions in binary form must reproduce the above copyright
14198090Srdivacky *    notice, this list of conditions and the following disclaimer in the
15198090Srdivacky *    documentation and/or other materials provided with the distribution.
16198090Srdivacky * 3. All advertising materials mentioning features or use of this software
17198090Srdivacky *    must display the following acknowledgement:
18198090Srdivacky *	This product includes software developed by the University of
19198090Srdivacky *	California, Berkeley and its contributors.
20198090Srdivacky * 4. Neither the name of the University nor the names of its contributors
21205218Srdivacky *    may be used to endorse or promote products derived from this software
22198090Srdivacky *    without specific prior written permission.
23198090Srdivacky *
24198090Srdivacky * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25198090Srdivacky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26198090Srdivacky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27198090Srdivacky * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28198090Srdivacky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29198090Srdivacky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30198090Srdivacky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31198090Srdivacky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32198090Srdivacky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33198090Srdivacky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34198090Srdivacky * SUCH DAMAGE.
35198090Srdivacky *
36198090Srdivacky *	@(#)memalloc.h	8.2 (Berkeley) 5/4/95
37198090Srdivacky *	$Id: memalloc.h,v 1.2 1994/09/24 02:57:51 davidg Exp $
38203954Srdivacky */
39198090Srdivacky
40198090Srdivackystruct stackmark {
41198090Srdivacky	struct stack_block *stackp;
42198090Srdivacky	char *stacknxt;
43198090Srdivacky	int stacknleft;
44198090Srdivacky};
45198090Srdivacky
46205218Srdivacky
47205218Srdivackyextern char *stacknxt;
48205218Srdivackyextern int stacknleft;
49203954Srdivackyextern int sstrnleft;
50203954Srdivackyextern int herefd;
51203954Srdivacky
52198090Srdivackypointer ckmalloc __P((int));
53198090Srdivackypointer ckrealloc __P((pointer, int));
54198090Srdivackychar *savestr __P((char *));
55198090Srdivackypointer stalloc __P((int));
56203954Srdivackyvoid stunalloc __P((pointer));
57198090Srdivackyvoid setstackmark __P((struct stackmark *));
58198090Srdivackyvoid popstackmark __P((struct stackmark *));
59198090Srdivackyvoid growstackblock __P((void));
60198090Srdivackyvoid grabstackblock __P((int));
61203954Srdivackychar *growstackstr __P((void));
62203954Srdivackychar *makestrspace __P((void));
63198090Srdivackyvoid ungrabstackstr __P((char *, char *));
64198090Srdivacky
65198090Srdivacky
66198090Srdivacky
67198090Srdivacky#define stackblock() stacknxt
68198090Srdivacky#define stackblocksize() stacknleft
69198090Srdivacky#define STARTSTACKSTR(p)	p = stackblock(), sstrnleft = stackblocksize()
70198090Srdivacky#define STPUTC(c, p)	(--sstrnleft >= 0? (*p++ = (c)) : (p = growstackstr(), *p++ = (c)))
71198090Srdivacky#define CHECKSTRSPACE(n, p)	{ if (sstrnleft < n) p = makestrspace(); }
72198090Srdivacky#define USTPUTC(c, p)	(--sstrnleft, *p++ = (c))
73198090Srdivacky#define STACKSTRNUL(p)	(sstrnleft == 0? (p = growstackstr(), *p = '\0') : (*p = '\0'))
74203954Srdivacky#define STUNPUTC(p)	(++sstrnleft, --p)
75203954Srdivacky#define STTOPC(p)	p[-1]
76203954Srdivacky#define STADJUST(amount, p)	(p += (amount), sstrnleft -= (amount))
77198090Srdivacky#define grabstackstr(p)	stalloc(stackblocksize() - sstrnleft)
78198090Srdivacky
79198090Srdivacky#define ckfree(p)	free((pointer)(p))
80198090Srdivacky