aboutsummaryrefslogtreecommitdiff
path: root/system/__sbrk.c
diff options
context:
space:
mode:
Diffstat (limited to 'system/__sbrk.c')
-rw-r--r--system/__sbrk.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/system/__sbrk.c b/system/__sbrk.c
new file mode 100644
index 0000000..df2a302
--- /dev/null
+++ b/system/__sbrk.c
@@ -0,0 +1,25 @@
+#include <sys/types.h>
+#define N ((void *)-1)
+
+extern void *SYS_brk(void *x);
+static void *cur = N;
+
+void *sbrk(ssize_t incr) {
+ void *t=0, *old=N;
+
+ if (cur == N) {
+ again:
+ cur = SYS_brk(t);
+ if (cur == N) return cur;
+ }
+
+ if (old == N) {
+ old = cur;
+ if (incr) {
+ t = old + incr;
+ goto again;
+ }
+ }
+
+ return old;
+}