00001 #include <lib.h>
00002 #define brk _brk
00003 #define sbrk _sbrk
00004 #include <unistd.h>
00005
00006 extern char *_brksize;
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 PUBLIC int brk(addr)
00018 char *addr;
00019 {
00020 message m;
00021
00022 if (addr != _brksize) {
00023 m.m1_p1 = addr;
00024 if (_syscall(MM, BRK, &m) < 0) return(-1);
00025 _brksize = m.m2_p1;
00026 }
00027 return(0);
00028 }
00029
00030
00031 PUBLIC char *sbrk(incr)
00032 int incr;
00033 {
00034 char *newsize, *oldsize;
00035
00036 oldsize = _brksize;
00037 newsize = _brksize + incr;
00038 if ((incr > 0 && newsize < oldsize) || (incr < 0 && newsize > oldsize))
00039 return( (char *) -1);
00040 if (brk(newsize) == 0)
00041 return(oldsize);
00042 else
00043 return( (char *) -1);
00044 }