CP/M sbrk now handles overflow correctly.

This commit is contained in:
David Given 2019-02-08 21:43:52 +01:00
parent a91ab5c599
commit 19f5ee3399

View file

@ -31,13 +31,25 @@ int brk(void* newend)
void* sbrk(int increment) void* sbrk(int increment)
{ {
char* old; char* old;
char* new;
if (increment == 0) if (increment == 0)
return current; return current;
old = current; old = current;
if (brk(old + increment) < 0) new = old + increment;
return OUT_OF_MEMORY;
if ((increment > 0) && (new <= old))
goto out_of_memory;
else if ((increment < 0) && (new >= old))
goto out_of_memory;
if (brk(new) < 0)
goto out_of_memory;
return old; return old;
out_of_memory:
errno = ENOMEM;
return OUT_OF_MEMORY;
} }