diff options
author | rtm <rtm> | 2006-08-11 13:55:18 +0000 |
---|---|---|
committer | rtm <rtm> | 2006-08-11 13:55:18 +0000 |
commit | 17a856577f9db766b8ef7099d0575d378dff5dd1 (patch) | |
tree | 53d0c687d9c9bf83d097a2171c48d04a569c5a61 /syscall.c | |
parent | 5be0039ce9e22f140a29e167526c64c723c5be3c (diff) | |
download | xv6-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.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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; |