_brk.c 562 B

123456789101112131415161718192021222324252627282930313233
  1. #include <lib.h>
  2. #define brk _brk
  3. #define sbrk _sbrk
  4. #include <unistd.h>
  5. extern char *_brksize;
  6. PUBLIC char *brk(addr)
  7. char *addr;
  8. {
  9. if (_callm1(MM, BRK, 0, 0, 0, addr, NIL_PTR, NIL_PTR) == 0) {
  10. _brksize = _M.m2_p1;
  11. return(NIL_PTR);
  12. } else {
  13. return((char *) -1);
  14. }
  15. }
  16. PUBLIC char *sbrk(incr)
  17. int incr;
  18. {
  19. char *newsize, *oldsize;
  20. oldsize = _brksize;
  21. newsize = _brksize + incr;
  22. if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize)
  23. return((char *) -1);
  24. if (_brk(newsize) == 0)
  25. return(oldsize);
  26. else
  27. return((char *) -1);
  28. }