/* $Source$ * $State$ * $Revision$ */ #include #include #include #include "libsys.h" #define OUT_OF_MEMORY (void*)(-1) /* sbrk returns this on failure */ static char* current = NULL; int brk(void* end) { int e = _syscall(__NR_brk, (quad) end, 0, 0); if (e == -1) errno = ENOMEM; else current = end; return e; } void* sbrk(int increment) { char* old; char* new; char* actual; if (!current) current = (char*) _syscall(__NR_brk, 0, 0, 0); if (increment == 0) return current; old = current; new = old + increment; actual = (char*) _syscall(__NR_brk, (quad) new, 0, 0); if (actual < new) { errno = ENOMEM; return OUT_OF_MEMORY; } current = actual; return old; }