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