sbrk.c 439 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include <u.h>
  2. #include <libc.h>
  3. extern char end[];
  4. static char *bloc = { end };
  5. extern int brk_(void*);
  6. enum
  7. {
  8. Round = 7
  9. };
  10. int
  11. brk(void *p)
  12. {
  13. uintptr bl;
  14. bl = ((uintptr)p + Round) & ~Round;
  15. if(brk_((void*)bl) < 0)
  16. return -1;
  17. bloc = (char*)bl;
  18. return 0;
  19. }
  20. void*
  21. sbrk(ulong n)
  22. {
  23. uintptr bl;
  24. bl = ((uintptr)bloc + Round) & ~Round;
  25. if(brk_((void*)(bl+n)) < 0)
  26. return (void*)-1;
  27. bloc = (char*)bl + n;
  28. return (void*)bl;
  29. }