brk.c 472 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "lib.h"
  2. #include <errno.h>
  3. #include "sys9.h"
  4. char end[];
  5. static char *bloc = { end };
  6. extern int _BRK_(void*);
  7. char *
  8. brk(char *p)
  9. {
  10. unsigned long n;
  11. n = (unsigned long)p;
  12. n += 3;
  13. n &= ~3;
  14. if(_BRK_((void*)n) < 0){
  15. errno = ENOMEM;
  16. return (char *)-1;
  17. }
  18. bloc = (char *)n;
  19. return 0;
  20. }
  21. void *
  22. sbrk(unsigned long n)
  23. {
  24. n += 3;
  25. n &= ~3;
  26. if(_BRK_((void *)(bloc+n)) < 0){
  27. errno = ENOMEM;
  28. return (void *)-1;
  29. }
  30. bloc += n;
  31. return (void *)(bloc-n);
  32. }