sbrk.c 560 B

123456789101112131415161718192021222324252627282930
  1. /* From libc-5.3.12 */
  2. #include <errno.h>
  3. #include <unistd.h>
  4. #include <sys/syscall.h>
  5. libc_hidden_proto(sbrk)
  6. extern void * __curbrk;
  7. libc_hidden_proto(__curbrk)
  8. extern int __init_brk (void);
  9. libc_hidden_proto(__init_brk)
  10. extern void *_brk(void *ptr) attribute_hidden;
  11. void *
  12. sbrk(intptr_t increment)
  13. {
  14. if (__init_brk () == 0)
  15. {
  16. char * tmp = (char*)__curbrk+increment;
  17. __curbrk = _brk(tmp);
  18. if (__curbrk == tmp)
  19. return tmp-increment;
  20. __set_errno(ENOMEM);
  21. return ((void *) -1);
  22. }
  23. return ((void *) -1);
  24. }
  25. libc_hidden_def(sbrk)