Annotation of coherent/d/bin/tsort/alc.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <sys/mdata.h>
                      3: #include "tsort.h"
                      4: 
                      5: 
                      6: #define BUMP   2048    /* twice minimum space to get from malloc */
                      7: 
                      8: 
                      9: /*
                     10:  *     Blockp is a pointer to a block of memory from which the
                     11:  *     various allocation routines will get memory.  Blockc is
                     12:  *     the number of bytes left in the block.  When these bytes
                     13:  *     are all used up, then malloc is called for BUMP more
                     14:  *     bytes.  This save malloc from going over all the small
                     15:  *     blocks.
                     16:  */
                     17: 
                     18: static char *blockp;
                     19: static int blockc = 0;
                     20: 
                     21: 
                     22: /*
                     23:  *     Alloc functions exactly like malloc with two exceptions
                     24:  *             1. It tries to get memory from blockp/blockc if
                     25:  *                possible.
                     26:  *             2. It never returns NULL, but instead exits with
                     27:  *                an error message if there is no memory left.
                     28:  */
                     29: 
                     30: static char *
                     31: alloc(size)
                     32: register unsigned size;
                     33: {
                     34:        register char *result;
                     35:        char    *malloc();
                     36: 
                     37:        /*
                     38:         * for alignment constraints.
                     39:         */
                     40:        size += ALSTRUCT - 1;
                     41:        size -= size % ALSTRUCT;
                     42:        if (blockc >= size) {
                     43:                blockc -= size;
                     44:                result = blockp;
                     45:                blockp += size;
                     46:                return (result);
                     47:        }
                     48:        if (size < BUMP / 2) {
                     49:                result = (char *)malloc(size + BUMP);
                     50:                blockp = result + size;
                     51:                blockc = BUMP;
                     52:        } else
                     53:                result = (char *)malloc(size);
                     54:        if (result == NULL)
                     55:                die("out of memory");
                     56:        return (result);
                     57: }
                     58: 
                     59: 
                     60: 
                     61: /*
                     62:  *     Newword returns a pointer to a word with the ancestors
                     63:  *     field set to NULL and the name field set to "str".
                     64:  */
                     65: 
                     66: struct word *
                     67: newword(str)
                     68: register char *str;
                     69: {
                     70:        register struct word *result;
                     71: 
                     72:        result = (struct word *) alloc( sizeof(struct word));
                     73:        result->name = alloc(strlen(str) + 1);
                     74:        strcpy(result->name, str);
                     75:        result->ancestors = NULL;
                     76:        return (result);
                     77: }
                     78: 
                     79: 
                     80: /*
                     81:  *     Newwordl returns a pointer to a wordlist with the element
                     82:  *     field set to "wrd".
                     83:  */
                     84: 
                     85: struct wordlist *
                     86: newwordl(wrd)
                     87: register struct word *wrd;
                     88: {
                     89:        register struct wordlist *result;
                     90: 
                     91:        result = (struct wordlist *) alloc( sizeof(struct wordlist));
                     92:        result->element = wrd;
                     93:        return (result);
                     94: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.