diff --git a/src/linux/brk.c b/src/linux/brk.c index 9f63c5a..c261518 100644 --- a/src/linux/brk.c +++ b/src/linux/brk.c @@ -2,5 +2,5 @@ int brk(void *end) { - return -(syscall(SYS_brk, end) == -1); + return -((void *)syscall(SYS_brk, end) != end); } diff --git a/src/linux/sbrk.c b/src/linux/sbrk.c index b2943a9..478a35e 100644 --- a/src/linux/sbrk.c +++ b/src/linux/sbrk.c @@ -3,5 +3,11 @@ void *sbrk(ptrdiff_t inc) { - return (void *)syscall(SYS_brk, syscall(SYS_brk, 0)+inc); + void *p = (void *)syscall(SYS_brk, 0); + + if (inc == 0) + return p; + if ((void *)syscall(SYS_brk, p+inc) == p+inc) + return p; + return (void *)-1; }