summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sh.c5
-rw-r--r--vm.c7
2 files changed, 8 insertions, 4 deletions
diff --git a/sh.c b/sh.c
index 16e325b..3ac6f5b 100644
--- a/sh.c
+++ b/sh.c
@@ -147,7 +147,7 @@ main(void)
static char buf[100];
int fd;
- // Assumes three file descriptors open.
+ // Ensure that three file descriptors are open.
while((fd = open("console", O_RDWR)) >= 0){
if(fd >= 3){
close(fd);
@@ -158,8 +158,7 @@ main(void)
// Read and run input commands.
while(getcmd(buf, sizeof(buf)) >= 0){
if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){
- // Clumsy but will have to do for now.
- // Chdir has no effect on the parent if run in the child.
+ // Chdir must be called by the parent, not the child.
buf[strlen(buf)-1] = 0; // chop \n
if(chdir(buf+3) < 0)
printf(2, "cannot cd %s\n", buf+3);
diff --git a/vm.c b/vm.c
index 5326d14..85f6ce2 100644
--- a/vm.c
+++ b/vm.c
@@ -237,7 +237,12 @@ allocuvm(pde_t *pgdir, uint oldsz, uint newsz)
return 0;
}
memset(mem, 0, PGSIZE);
- mappages(pgdir, (char*)a, PGSIZE, v2p(mem), PTE_W|PTE_U);
+ if(mappages(pgdir, (char*)a, PGSIZE, v2p(mem), PTE_W|PTE_U) < 0){
+ cprintf("allocuvm out of memory (2)\n");
+ deallocuvm(pgdir, newsz, oldsz);
+ kfree(mem);
+ return 0;
+ }
}
return newsz;
}