summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
authorrtm <rtm>2006-08-11 13:55:18 +0000
committerrtm <rtm>2006-08-11 13:55:18 +0000
commit17a856577f9db766b8ef7099d0575d378dff5dd1 (patch)
tree53d0c687d9c9bf83d097a2171c48d04a569c5a61 /syscall.c
parent5be0039ce9e22f140a29e167526c64c723c5be3c (diff)
downloadxv6-labs-17a856577f9db766b8ef7099d0575d378dff5dd1.tar.gz
xv6-labs-17a856577f9db766b8ef7099d0575d378dff5dd1.tar.bz2
xv6-labs-17a856577f9db766b8ef7099d0575d378dff5dd1.zip
init creates console, opens 0/1/2, runs sh
sh accepts 0-argument commands (like userfs) reads from console
Diffstat (limited to 'syscall.c')
-rw-r--r--syscall.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/syscall.c b/syscall.c
index c53c447..6ba185e 100644
--- a/syscall.c
+++ b/syscall.c
@@ -319,14 +319,19 @@ sys_mknod(void)
return -1;
dp = iget(rootdev, 1); // XXX should parse name
- if (dp->type != T_DIR)
+ if (dp->type != T_DIR) {
+ iput(dp);
return -1;
+ }
+
nip = mknod (dp, cp->mem + arg0, (short) arg1, (short) arg2,
(short) arg3);
+ iput(dp);
+
if (nip == 0) return -1;
+
iput(nip);
- iput(dp);
return 0;
}
@@ -376,7 +381,7 @@ sys_exec(void)
if(ip == 0)
return -1;
- if(readi(ip, &elf, 0, sizeof(elf)) < sizeof(elf))
+ if(readi(ip, (char*)&elf, 0, sizeof(elf)) < sizeof(elf))
goto bad;
if(elf.magic != ELF_MAGIC)
@@ -384,7 +389,8 @@ sys_exec(void)
sz = 0;
for(i = 0; i < elf.phnum; i++){
- if(readi(ip, &ph, elf.phoff + i * sizeof(ph), sizeof(ph)) != sizeof(ph))
+ if(readi(ip, (char*)&ph, elf.phoff + i * sizeof(ph),
+ sizeof(ph)) != sizeof(ph))
goto bad;
if(ph.type != ELF_PROG_LOAD)
continue;
@@ -450,7 +456,8 @@ sys_exec(void)
mem = 0;
for(i = 0; i < elf.phnum; i++){
- if(readi(ip, &ph, elf.phoff + i * sizeof(ph), sizeof(ph)) != sizeof(ph))
+ if(readi(ip, (char*)&ph, elf.phoff + i * sizeof(ph),
+ sizeof(ph)) != sizeof(ph))
goto bad2;
if(ph.type != ELF_PROG_LOAD)
continue;