fix brk/sbrk behavior to match the real legacy functions
[musl] / src / linux / sbrk.c
index b2943a9..5fab74b 100644 (file)
@@ -3,5 +3,7 @@
 
 void *sbrk(ptrdiff_t inc)
 {
-       return (void *)syscall(SYS_brk, syscall(SYS_brk, 0)+inc);
+       unsigned long cur = syscall(SYS_brk, 0);
+       if (inc && syscall(SYS_brk, cur+inc) != cur+inc) return (void *)-1;
+       return (void *)cur;
 }