sbrk.c 562 B

1234567891011121314151617181920212223242526272829303132333435
  1. /* $Source$
  2. * $State$
  3. * $Revision$
  4. */
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include "libsys.h"
  8. #define OUT_OF_MEMORY (void*)(-1) /* sbrk returns this on failure */
  9. static char* current = NULL;
  10. void* sbrk(intptr_t increment)
  11. {
  12. char* old;
  13. char* new;
  14. char* actual;
  15. if (!current)
  16. current = (char*) _syscall(__NR_brk, 0, 0, 0);
  17. if (increment == 0)
  18. return current;
  19. old = current;
  20. new = old + increment;
  21. actual = (char*) _syscall(__NR_brk, (quad) new, 0, 0);
  22. if (actual < new)
  23. return OUT_OF_MEMORY;
  24. current = actual;
  25. return old;
  26. }