mem.c 745 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * (c) danielinux 2019
  3. * GPLv.2
  4. *
  5. * See LICENSE for details
  6. */
  7. extern unsigned int _start_heap;
  8. #define NULL (((void *)0))
  9. void * _sbrk(unsigned int incr)
  10. {
  11. static unsigned char *heap = (unsigned char *)&_start_heap;
  12. void *old_heap = heap;
  13. if (((incr >> 2) << 2) != incr)
  14. incr = ((incr >> 2) + 1) << 2;
  15. if (heap == NULL)
  16. heap = (unsigned char *)&_start_heap;
  17. else
  18. heap += incr;
  19. return old_heap;
  20. }
  21. void * _sbrk_r(unsigned int incr)
  22. {
  23. static unsigned char *heap = NULL;
  24. void *old_heap = heap;
  25. if (((incr >> 2) << 2) != incr)
  26. incr = ((incr >> 2) + 1) << 2;
  27. if (old_heap == NULL)
  28. old_heap = heap = (unsigned char *)&_start_heap;
  29. heap += incr;
  30. return old_heap;
  31. }