|
|
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.