summaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/proc.c b/proc.c
index f799a4d..e69bacf 100644
--- a/proc.c
+++ b/proc.c
@@ -142,8 +142,13 @@ userinit(void)
int
growproc(int n)
{
- if (!allocuvm(proc->pgdir, (char *)proc->sz, n))
- return -1;
+ if(n > 0){
+ if (!allocuvm(proc->pgdir, (char *)proc->sz, n))
+ return -1;
+ } else if(n < 0){
+ if (!deallocuvm(proc->pgdir, (char *)(proc->sz + n), 0 - n))
+ return -1;
+ }
proc->sz += n;
switchuvm(proc);
return 0;