memalloc.h

Go to the documentation of this file.
00001 /*-
00002  * Copyright (c) 1991 The Regents of the University of California.
00003  * All rights reserved.
00004  *
00005  * This code is derived from software contributed to Berkeley by
00006  * Kenneth Almquist.
00007  *
00008  * Redistribution and use in source and binary forms, with or without
00009  * modification, are permitted provided that the following conditions
00010  * are met:
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  * 2. Redistributions in binary form must reproduce the above copyright
00014  *    notice, this list of conditions and the following disclaimer in the
00015  *    documentation and/or other materials provided with the distribution.
00016  * 3. All advertising materials mentioning features or use of this software
00017  *    must display the following acknowledgement:
00018  *      This product includes software developed by the University of
00019  *      California, Berkeley and its contributors.
00020  * 4. Neither the name of the University nor the names of its contributors
00021  *    may be used to endorse or promote products derived from this software
00022  *    without specific prior written permission.
00023  *
00024  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00025  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00027  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00028  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00029  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00030  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00031  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00033  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00034  * SUCH DAMAGE.
00035  *
00036  *      @(#)memalloc.h  5.1 (Berkeley) 3/7/91
00037  */
00038 
00039 struct stackmark {
00040         struct stack_block *stackp;
00041         char *stacknxt;
00042         int stacknleft;
00043 };
00044 
00045 
00046 extern char *stacknxt;
00047 extern int stacknleft;
00048 extern int sstrnleft;
00049 extern int herefd;
00050 
00051 #ifdef __STDC__
00052 pointer ckmalloc(int);
00053 pointer ckrealloc(pointer, int);
00054 void free(pointer);             /* defined in C library */
00055 char *savestr(char *);
00056 pointer stalloc(int);
00057 void stunalloc(pointer);
00058 void setstackmark(struct stackmark *);
00059 void popstackmark(struct stackmark *);
00060 void growstackblock(void);
00061 void grabstackblock(int);
00062 char *growstackstr(void);
00063 char *makestrspace(void);
00064 void ungrabstackstr(char *, char *);
00065 #else
00066 pointer ckmalloc();
00067 pointer ckrealloc();
00068 void free();            /* defined in C library */
00069 char *savestr();
00070 pointer stalloc();
00071 void stunalloc();
00072 void setstackmark();
00073 void popstackmark();
00074 void growstackblock();
00075 void grabstackblock();
00076 char *growstackstr();
00077 char *makestrspace();
00078 void ungrabstackstr();
00079 #endif
00080 
00081 
00082 
00083 #define stackblock() stacknxt
00084 #define stackblocksize() stacknleft
00085 #define STARTSTACKSTR(p)        p = stackblock(), sstrnleft = stackblocksize()
00086 #define STPUTC(c, p)    (--sstrnleft >= 0? (*p++ = (c)) : (p = growstackstr(), *p++ = (c)))
00087 #define CHECKSTRSPACE(n, p)     if (sstrnleft < n) p = makestrspace(); else
00088 #define USTPUTC(c, p)   (--sstrnleft, *p++ = (c))
00089 #define STACKSTRNUL(p)  (sstrnleft == 0? (p = growstackstr(), *p = '\0') : (*p = '\0'))
00090 #define STUNPUTC(p)     (++sstrnleft, --p)
00091 #define STTOPC(p)       p[-1]
00092 #define STADJUST(amount, p)     (p += (amount), sstrnleft -= (amount))
00093 #define grabstackstr(p) stalloc(stackblocksize() - sstrnleft)
00094 
00095 #define ckfree(p)       free((pointer)(p))

Generated on Fri Apr 14 22:56:41 2006 for minix by  doxygen 1.4.6