Annotation of 43BSD/contrib/B/src/bint/b1mem.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
        !             2: 
        !             3: /*
        !             4:   $Header: b1mem.c,v 1.4 85/08/27 10:55:51 timo Exp $
        !             5: */
        !             6: 
        !             7: /* B memory management */
        !             8: 
        !             9: #include "b.h"
        !            10: #include "b1obj.h"
        !            11: #include "b1mem.h"
        !            12: #include "b3err.h" /* For still_ok */
        !            13: 
        !            14: #ifdef IBMPC
        !            15: #define RESERVE
        !            16: #endif
        !            17: 
        !            18: #ifdef RESERVE
        !            19: Forward char *mymalloc(), *myrealloc();
        !            20: #else
        !            21: #define mymalloc malloc
        !            22: #define myrealloc realloc
        !            23: #define initreserve() 0 /* Dummy routine */
        !            24: #endif
        !            25: 
        !            26: #ifdef ebug
        !            27: 
        !            28: Hidden value notel, inotel;
        !            29: Visible bool noting= Yes;
        !            30: 
        !            31: Hidden Procedure note(p) int p; {
        !            32:        if (!noting) {
        !            33:                value ip;
        !            34:                noting= Yes;
        !            35:                insert(ip= mk_integer(p), &notel);
        !            36:                release(ip);
        !            37:                noting= No;
        !            38:        }
        !            39: }
        !            40: 
        !            41: Hidden Procedure denote(p) int p; {
        !            42:        if (!noting) {
        !            43:                value ip;
        !            44:                noting= Yes;
        !            45:                if (in(ip= mk_integer(p), notel)) {
        !            46:                        remove(ip, &notel);
        !            47:                        if (inotel != Vnil && in(ip, inotel))
        !            48:                                remove(ip, &inotel);
        !            49:                }
        !            50: #ifndef IBMPC
        !            51:                else syserr(MESS(600, "releasing illegally"));
        !            52: #endif
        !            53:                release(ip);
        !            54:                noting= No;
        !            55:        }
        !            56: }
        !            57: 
        !            58: Visible Procedure initmem() {
        !            59:        notel= mk_elt(); noting= No;
        !            60:        initreserve();
        !            61: }
        !            62: 
        !            63: Visible Procedure end_init() {
        !            64:        noting= Yes;
        !            65:        inotel= copy(notel);
        !            66:        noting= No;
        !            67: }
        !            68: 
        !            69: Visible Procedure term_mem() {
        !            70:        int l, i; value v;
        !            71:        testing= noting= Yes;
        !            72:        l= length(notel);
        !            73:        if (l>length(inotel)) fprintf(stdout, "Unreleased:\n");
        !            74:        for(i=1; i<=l; i++) {
        !            75:                v= thof(i, notel);
        !            76:                if (!in(v, inotel))
        !            77:                        { wri((value) intval(v), No, No, No); newline(); }
        !            78:        }
        !            79: }
        !            80: 
        !            81: Visible Procedure endmem() {
        !            82:        release(inotel); inotel= Vnil;
        !            83:        release(notel); notel= Vnil;
        !            84: }
        !            85: 
        !            86: #else !ebug
        !            87: 
        !            88: #define note(p)
        !            89: #define denote(p)
        !            90: 
        !            91: Visible Procedure initmem()
        !            92: {
        !            93:        initreserve();
        !            94: }
        !            95: 
        !            96: Visible Procedure end_init() {}
        !            97: Visible Procedure term_mem() {}
        !            98: Visible Procedure endmem() {}
        !            99: 
        !           100: #endif ebug
        !           101: 
        !           102: #define Negative MESS(601, "creating value of exceedingly large size")
        !           103: 
        !           104: Visible ptr getmem(syze) unsigned syze; {
        !           105:        ptr p;
        !           106:        if ((int) (syze) < 0) error(Negative);
        !           107:        p= (ptr) mymalloc(syze);
        !           108:        note(p);
        !           109:        if (bugs || p==Nil) printf("{%u}",syze);
        !           110:        if (p == Nil) memexh();
        !           111:        return p;
        !           112: }
        !           113: 
        !           114: Visible Procedure regetmem(v, syze) ptr *v; unsigned syze; {
        !           115:        if ((int) (syze) < 0) error(Negative);
        !           116:        if (bugs) printf("[%u]",syze);
        !           117:        denote(*v);
        !           118:        *v= myrealloc(*v, syze);
        !           119:        note(*v);
        !           120:        if (*v == Nil) memexh();
        !           121: }
        !           122: 
        !           123: Visible Procedure freemem(p) ptr p; {
        !           124:        denote(p);
        !           125:        free(p);
        !           126: }
        !           127: 
        !           128: #ifdef RESERVE
        !           129: 
        !           130: #define RES_SIZE 3000
        !           131: 
        !           132: Hidden char *p_reserve= Nil;
        !           133: 
        !           134: Hidden Procedure initreserve() {
        !           135:        p_reserve= malloc(RES_SIZE);
        !           136: }
        !           137: 
        !           138: Hidden char *mymalloc(syze) unsigned syze; {
        !           139:        char *p;
        !           140:        p= malloc(syze);
        !           141:        if (p != Nil && p_reserve != Nil) return p;
        !           142:        if (p_reserve != Nil) {
        !           143:                free(p_reserve); p_reserve= Nil;
        !           144:                p= malloc(syze);
        !           145:                if (p != Nil) error(MESS(602, "out of memory"));
        !           146:        }
        !           147:        if (p_reserve == Nil) initreserve();
        !           148:        return p;
        !           149: }
        !           150: 
        !           151: Hidden char *myrealloc(p1, syze) char *p1; unsigned syze; {
        !           152:        char *p;
        !           153:        p= realloc(p1, syze);
        !           154:        if (p != Nil && p_reserve != Nil) return p;
        !           155:        if (p_reserve != Nil) {
        !           156:                free(p_reserve); p_reserve= Nil;
        !           157:                p= realloc(p1, syze);
        !           158:                if (p != Nil) error(MESS(602, "out of memory"));
        !           159:        }
        !           160:        if (p_reserve == Nil) initreserve();
        !           161:        return p;
        !           162: }
        !           163: 
        !           164: #endif RESERVE

unix.superglobalmegacorp.com

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