home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / D / LIBC / LIBC-4.6 / LIBC-4 / libc-linux / sysdeps / linux / i386 / __sbrk.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-23  |  669 b   |  34 lines

  1. #include <unistd.h>
  2. #include <sys/syscall.h>
  3. #include <errno.h>
  4.  
  5. extern void * ___brk_addr;
  6.  
  7. void *
  8. __sbrk(ptrdiff_t increment)
  9. {
  10.     void * tmp = ___brk_addr+increment;
  11. #if defined(__PIC__) || defined (__pic__)
  12.     __asm__ volatile ("pushl %%ebx\n\t"
  13.               "movl %%ecx,%%ebx\n\t"
  14.                           "int $0x80\n\t"
  15.                           "popl %%ebx"
  16.         :"=a" (___brk_addr)
  17.         :"0" (SYS_brk),"c" (tmp));
  18. #else
  19.     __asm__ volatile ("int $0x80"
  20.         :"=a" (___brk_addr)
  21.         :"0" (SYS_brk),"b" (tmp));
  22. #endif
  23.     if (___brk_addr == tmp)
  24.         return tmp-increment;
  25.     errno = ENOMEM;
  26.     return ((void *) -1);
  27. }
  28.  
  29.  
  30. #include <gnu-stabs.h>
  31. #ifdef weak_alias
  32. weak_alias (__sbrk, sbrk);
  33. #endif
  34.