X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0cf90cca0c924622f3fee8d2a3fafa8238363dc6..75339638bc5f21f13d3475374ecbd91065a427c3:/lunaix-os/kernel/mm/dmm.c diff --git a/lunaix-os/kernel/mm/dmm.c b/lunaix-os/kernel/mm/dmm.c index 188bb06..cc75bd9 100644 --- a/lunaix-os/kernel/mm/dmm.c +++ b/lunaix-os/kernel/mm/dmm.c @@ -1,18 +1,30 @@ -#include -#include +#include +#include #include #include #include +#include -__DEFINE_LXSYSCALL1(int, sbrk, size_t, size) +__DEFINE_LXSYSCALL1(void*, sbrk, ssize_t, incr) { - // TODO mem_remap to expand heap region - return 0; + struct proc_mm* pvms = &__current->mm; + struct mm_region* heap = pvms->heap; + + assert(heap); + int err = mem_adjust_inplace(&pvms->regions, heap, heap->end + incr); + if (err) { + return (void*)DO_STATUS(err); + } + return (void*)heap->end; } -__DEFINE_LXSYSCALL1(void*, brk, void*, addr) +__DEFINE_LXSYSCALL1(int, brk, void*, addr) { - // TODO mem_remap to expand heap region - return 0; + struct proc_mm* pvms = &__current->mm; + struct mm_region* heap = pvms->heap; + + assert(heap); + int err = mem_adjust_inplace(&pvms->regions, heap, (ptr_t)addr); + return DO_STATUS(err); } \ No newline at end of file