xref: /original-bsd/bin/sh/memalloc.h (revision 6d5a9f9c)
1 /*-
2  * Copyright (c) 1991, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Kenneth Almquist.
7  *
8  * %sccs.include.redist.c%
9  *
10  *	@(#)memalloc.h	8.2 (Berkeley) 05/04/95
11  */
12 
13 struct stackmark {
14 	struct stack_block *stackp;
15 	char *stacknxt;
16 	int stacknleft;
17 };
18 
19 
20 extern char *stacknxt;
21 extern int stacknleft;
22 extern int sstrnleft;
23 extern int herefd;
24 
25 pointer ckmalloc __P((int));
26 pointer ckrealloc __P((pointer, int));
27 char *savestr __P((char *));
28 pointer stalloc __P((int));
29 void stunalloc __P((pointer));
30 void setstackmark __P((struct stackmark *));
31 void popstackmark __P((struct stackmark *));
32 void growstackblock __P((void));
33 void grabstackblock __P((int));
34 char *growstackstr __P((void));
35 char *makestrspace __P((void));
36 void ungrabstackstr __P((char *, char *));
37 
38 
39 
40 #define stackblock() stacknxt
41 #define stackblocksize() stacknleft
42 #define STARTSTACKSTR(p)	p = stackblock(), sstrnleft = stackblocksize()
43 #define STPUTC(c, p)	(--sstrnleft >= 0? (*p++ = (c)) : (p = growstackstr(), *p++ = (c)))
44 #define CHECKSTRSPACE(n, p)	{ if (sstrnleft < n) p = makestrspace(); }
45 #define USTPUTC(c, p)	(--sstrnleft, *p++ = (c))
46 #define STACKSTRNUL(p)	(sstrnleft == 0? (p = growstackstr(), *p = '\0') : (*p = '\0'))
47 #define STUNPUTC(p)	(++sstrnleft, --p)
48 #define STTOPC(p)	p[-1]
49 #define STADJUST(amount, p)	(p += (amount), sstrnleft -= (amount))
50 #define grabstackstr(p)	stalloc(stackblocksize() - sstrnleft)
51 
52 #define ckfree(p)	free((pointer)(p))
53