From: David Given Date: Sat, 18 May 2013 12:00:37 +0000 (+0100) Subject: Reapply bugfix to sbrk() which got dropped during the move from linx386/libsys X-Git-Tag: release-6-0-pre-5~22 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=fc1b3672a36228bc7e0664d98542650984b049c1;p=ack.git Reapply bugfix to sbrk() which got dropped during the move from linx386/libsys to liblinux. Set errno correctly. --- diff --git a/plat/linux/liblinux/brk.c b/plat/linux/liblinux/brk.c index 8bb53d31d..7ce5c5fc8 100644 --- a/plat/linux/liblinux/brk.c +++ b/plat/linux/liblinux/brk.c @@ -5,9 +5,13 @@ #include #include +#include #include "libsys.h" int brk(void* end) { - return _syscall(__NR_brk, (quad) end, 0, 0); + int e = _syscall(__NR_brk, (quad) end, 0, 0); + if (e == -1) + errno = ENOMEM; + return e; } diff --git a/plat/linux/liblinux/sbrk.c b/plat/linux/liblinux/sbrk.c index 17b273f42..35810ef89 100644 --- a/plat/linux/liblinux/sbrk.c +++ b/plat/linux/liblinux/sbrk.c @@ -1,32 +1,39 @@ -/* $Source: /cvsroot/tack/Ack/plat/linux386/libsys/sbrk.c,v $ - * $State: Exp $ - * $Revision: 1.1 $ +/* $Source$ + * $State$ + * $Revision$ */ #include -#include #include +#include #include "libsys.h" #define OUT_OF_MEMORY (void*)(-1) /* sbrk returns this on failure */ -extern char _end[1]; - -static char* current = _end; +static char* current = NULL; void* sbrk(intptr_t 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; - if (brk(new) < 0) + + actual = (char*) _syscall(__NR_brk, (quad) new, 0, 0); + if (actual < new) + { + errno = ENOMEM; return OUT_OF_MEMORY; + } - current = new; + current = actual; return old; }