Annotation of coherent/b/lib/libc/sys/brk.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <sys/types.h>
                      3: #include <errno.h>
                      4: 
                      5: extern char *_brk();
                      6: 
                      7: #if Z8001
                      8: paddr_t
                      9: vtop(cp)
                     10: register unsigned long cp;
                     11: {
                     12:        register unsigned int offs = cp;
                     13: 
                     14:        cp >>= 8;
                     15:        cp &= 0x7F0000L;
                     16:        return(cp | offs);
                     17: }
                     18: 
                     19: char *
                     20: ptov(p)
                     21: register unsigned long p;
                     22: {
                     23:        register unsigned int offs = p;
                     24: 
                     25:        p <<=8;
                     26:        p &= 0x7F000000L;
                     27:        return(p | offs);
                     28: }
                     29: #else
                     30: #define vtop(A) ((paddr_t)(A))
                     31: #define ptov(A) ((char *)(A))
                     32: #endif
                     33: 
                     34: #if IAPX86
                     35: static char    *minbrk = NULL;         /* must init at run time */
                     36: static char    *actbrk = NULL;
                     37: static char    *reqbrk = NULL;
                     38: #else
                     39: extern char    end[];                  /* end of loaded private data */
                     40: static char    *minbrk = end;          /* can't brk before end */
                     41: static char    *actbrk = end;          /* actual end of private data */
                     42: static char    *reqbrk = end;          /* requested (virtual) end of p.d. */
                     43: #endif
                     44: 
                     45: int
                     46: brk(newbrk)
                     47: register char *newbrk;
                     48: {
                     49:        register char *abrk;
                     50: 
                     51:        errno = 0;
                     52:        newbrk += (int)newbrk & 1;
                     53: #if IAPX86
                     54:        if (minbrk == NULL)
                     55:                minbrk = actbrk = reqbrk = _brk(NULL);
                     56: #endif
                     57:        if (newbrk < minbrk) {
                     58:                errno = EINVAL;
                     59:                return(-1);
                     60:        }
                     61:        abrk = _brk(newbrk);
                     62:        if (errno)
                     63:                return(-1);
                     64:        if (abrk < newbrk) {
                     65:                errno = ENOMEM;
                     66:                return(-1);
                     67:        }
                     68:        reqbrk = newbrk;
                     69:        actbrk = abrk;
                     70:        return(0);
                     71: }
                     72: 
                     73: char *
                     74: sbrk(incr)
                     75: register unsigned int incr;
                     76: {
                     77:        register paddr_t rbrk;
                     78: 
                     79: #if IAPX86
                     80:        if (minbrk == NULL)
                     81:                minbrk = actbrk = reqbrk = _brk(NULL);
                     82: #endif
                     83:        incr += incr & 1;
                     84:        rbrk = vtop(reqbrk);
                     85:        if (rbrk + incr <= vtop(actbrk)) {
                     86:                reqbrk = ptov(rbrk + incr);
                     87:                return(ptov(rbrk));
                     88:        }
                     89: #if Z8001
                     90:        if ((rbrk+incr ^ rbrk) > 65536L  &&  (int)rbrk+incr) {
                     91:                rbrk += 65536L;
                     92:                rbrk &= 0xFFFF0000L;
                     93:                reqbrk = ptov(rbrk);
                     94:        }
                     95: #endif
                     96:        if (brk(ptov(rbrk + incr)))
                     97:                return((char *)-1);
                     98:        return(ptov(rbrk));
                     99: }

unix.superglobalmegacorp.com

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