|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.