summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
authorkaashoek <kaashoek>2006-08-20 03:08:54 +0000
committerkaashoek <kaashoek>2006-08-20 03:08:54 +0000
commit16083d4462b9a57ec1e1fc81cea73da9479982a5 (patch)
treecd20458cba2b461789ead3778c2b87de43fe976c /syscall.c
parent8787cd01dfa6080d219f3dd7bbf03f3eb988a74e (diff)
downloadxv6-labs-16083d4462b9a57ec1e1fc81cea73da9479982a5.tar.gz
xv6-labs-16083d4462b9a57ec1e1fc81cea73da9479982a5.tar.bz2
xv6-labs-16083d4462b9a57ec1e1fc81cea73da9479982a5.zip
removed block system call
renumber system calls (run gmake clean!) skeleton for dup system call
Diffstat (limited to 'syscall.c')
-rw-r--r--syscall.c61
1 files changed, 20 insertions, 41 deletions
diff --git a/syscall.c b/syscall.c
index 31b6189..5b857bd 100644
--- a/syscall.c
+++ b/syscall.c
@@ -399,6 +399,23 @@ sys_fstat(void)
}
int
+sys_dup(void)
+{
+ struct proc *cp = curproc[cpu()];
+ uint fd;
+ int r;
+
+ if(fetcharg(0, &fd) < 0)
+ return -1;
+ if(fd < 0 || fd >= NOFILE)
+ return -1;
+ if(cp->fds[fd] == 0)
+ return -1;
+ r = fd_dup (cp->fds[fd]);
+ return r;
+}
+
+int
sys_link(void)
{
struct proc *cp = curproc[cpu()];
@@ -543,44 +560,6 @@ sys_exec(void)
return 0;
}
-int
-sys_block(void)
-{
- int i, j;
- struct buf *b;
- struct inode *ip;
-
- for (i = 0; i < 2; i++) {
- cprintf ("issue read\n");
- b = bread(1, i);
-
- cprintf("disk 1 sector %d: ", i);
- for (j = 0; j < 4; j++)
- cprintf("%x ", b->data[j] & 0xff);
- cprintf("\n");
-
- brelse(b);
- }
-
- ip = iget(1, 1);
- cprintf("iget 1: %d %d %d %d %d %d %d %d\n",
- ip->dev, ip->inum, ip->count, ip->busy,
- ip->type, ip->nlink, ip->size, ip->addrs[0]);
- iput(ip);
-
- ip = namei(".././//./../usertests", NAMEI_LOOKUP, 0);
- if(ip){
- cprintf("namei(usertests): %d %d %d %d %d %d %d %d\n",
- ip->dev, ip->inum, ip->count, ip->busy,
- ip->type, ip->nlink, ip->size, ip->addrs[0]);
- iput(ip);
- } else {
- cprintf("namei(usertests) failed\n");
- }
-
- return 0;
-}
-
void
syscall(void)
{
@@ -610,9 +589,6 @@ syscall(void)
case SYS_close:
ret = sys_close();
break;
- case SYS_block:
- ret = sys_block();
- break;
case SYS_kill:
ret = sys_kill();
break;
@@ -640,6 +616,9 @@ syscall(void)
case SYS_chdir:
ret = sys_chdir();
break;
+ case SYS_dup:
+ ret = sys_dup();
+ break;
default:
cprintf("unknown sys call %d\n", num);
// XXX fault