removed block system call
renumber system calls (run gmake clean!) skeleton for dup system call
This commit is contained in:
parent
8787cd01df
commit
16083d4462
7 changed files with 43 additions and 59 deletions
1
defs.h
1
defs.h
|
@ -94,6 +94,7 @@ int fd_read(struct fd *fd, char *addr, int n);
|
||||||
int fd_write(struct fd *fd, char *addr, int n);
|
int fd_write(struct fd *fd, char *addr, int n);
|
||||||
int fd_stat(struct fd *fd, struct stat *);
|
int fd_stat(struct fd *fd, struct stat *);
|
||||||
void fd_incref(struct fd *fd);
|
void fd_incref(struct fd *fd);
|
||||||
|
int fd_dup(struct fd *fd);
|
||||||
|
|
||||||
// ide.c
|
// ide.c
|
||||||
void ide_init(void);
|
void ide_init(void);
|
||||||
|
|
6
fd.c
6
fd.c
|
@ -149,3 +149,9 @@ fd_incref(struct fd *fd)
|
||||||
fd->ref++;
|
fd->ref++;
|
||||||
release(&fd_table_lock);
|
release(&fd_table_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fd_dup(struct fd *fd)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
61
syscall.c
61
syscall.c
|
@ -398,6 +398,23 @@ sys_fstat(void)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
int
|
||||||
sys_link(void)
|
sys_link(void)
|
||||||
{
|
{
|
||||||
|
@ -543,44 +560,6 @@ sys_exec(void)
|
||||||
return 0;
|
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
|
void
|
||||||
syscall(void)
|
syscall(void)
|
||||||
{
|
{
|
||||||
|
@ -610,9 +589,6 @@ syscall(void)
|
||||||
case SYS_close:
|
case SYS_close:
|
||||||
ret = sys_close();
|
ret = sys_close();
|
||||||
break;
|
break;
|
||||||
case SYS_block:
|
|
||||||
ret = sys_block();
|
|
||||||
break;
|
|
||||||
case SYS_kill:
|
case SYS_kill:
|
||||||
ret = sys_kill();
|
ret = sys_kill();
|
||||||
break;
|
break;
|
||||||
|
@ -640,6 +616,9 @@ syscall(void)
|
||||||
case SYS_chdir:
|
case SYS_chdir:
|
||||||
ret = sys_chdir();
|
ret = sys_chdir();
|
||||||
break;
|
break;
|
||||||
|
case SYS_dup:
|
||||||
|
ret = sys_dup();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
cprintf("unknown sys call %d\n", num);
|
cprintf("unknown sys call %d\n", num);
|
||||||
// XXX fault
|
// XXX fault
|
||||||
|
|
28
syscall.h
28
syscall.h
|
@ -1,18 +1,18 @@
|
||||||
#define SYS_fork 1
|
#define SYS_fork 1
|
||||||
#define SYS_exit 2
|
#define SYS_exit 2
|
||||||
#define SYS_wait 3
|
#define SYS_wait 3
|
||||||
#define SYS_pipe 5
|
#define SYS_pipe 4
|
||||||
#define SYS_write 6
|
#define SYS_write 5
|
||||||
#define SYS_read 7
|
#define SYS_read 6
|
||||||
#define SYS_close 8
|
#define SYS_close 7
|
||||||
#define SYS_block 9
|
#define SYS_kill 9
|
||||||
#define SYS_kill 10
|
#define SYS_exec 10
|
||||||
#define SYS_exec 13
|
#define SYS_open 11
|
||||||
#define SYS_open 14
|
#define SYS_mknod 12
|
||||||
#define SYS_mknod 15
|
#define SYS_unlink 13
|
||||||
#define SYS_unlink 16
|
#define SYS_fstat 14
|
||||||
#define SYS_fstat 17
|
#define SYS_link 15
|
||||||
#define SYS_link 18
|
#define SYS_mkdir 16
|
||||||
#define SYS_mkdir 19
|
#define SYS_chdir 17
|
||||||
#define SYS_chdir 20
|
#define SYS_dup 18
|
||||||
|
|
||||||
|
|
2
user.h
2
user.h
|
@ -6,7 +6,6 @@ int pipe(int*);
|
||||||
int write(int, void*, int);
|
int write(int, void*, int);
|
||||||
int read(int, void*, int);
|
int read(int, void*, int);
|
||||||
int close(int);
|
int close(int);
|
||||||
int block(void);
|
|
||||||
int kill(int);
|
int kill(int);
|
||||||
int panic(char*);
|
int panic(char*);
|
||||||
int cons_puts(char*);
|
int cons_puts(char*);
|
||||||
|
@ -18,6 +17,7 @@ int fstat (int fd, struct stat *stat);
|
||||||
int link(char *, char *);
|
int link(char *, char *);
|
||||||
int mkdir(char *);
|
int mkdir(char *);
|
||||||
int chdir(char *);
|
int chdir(char *);
|
||||||
|
int dup(int);
|
||||||
|
|
||||||
int stat(char *, struct stat *stat);
|
int stat(char *, struct stat *stat);
|
||||||
int puts(char*);
|
int puts(char*);
|
||||||
|
|
2
userfs.c
2
userfs.c
|
@ -20,8 +20,6 @@ main(void)
|
||||||
|
|
||||||
printf(stdout, "userfs is running\n");
|
printf(stdout, "userfs is running\n");
|
||||||
|
|
||||||
block();
|
|
||||||
|
|
||||||
fd = open("echo", 0);
|
fd = open("echo", 0);
|
||||||
if(fd >= 0){
|
if(fd >= 0){
|
||||||
printf(stdout, "open echo ok\n");
|
printf(stdout, "open echo ok\n");
|
||||||
|
|
2
usys.S
2
usys.S
|
@ -15,7 +15,6 @@ STUB(pipe)
|
||||||
STUB(read)
|
STUB(read)
|
||||||
STUB(write)
|
STUB(write)
|
||||||
STUB(close)
|
STUB(close)
|
||||||
STUB(block)
|
|
||||||
STUB(kill)
|
STUB(kill)
|
||||||
STUB(exec)
|
STUB(exec)
|
||||||
STUB(open)
|
STUB(open)
|
||||||
|
@ -25,3 +24,4 @@ STUB(fstat)
|
||||||
STUB(link)
|
STUB(link)
|
||||||
STUB(mkdir)
|
STUB(mkdir)
|
||||||
STUB(chdir)
|
STUB(chdir)
|
||||||
|
STUB(dup)
|
||||||
|
|
Loading…
Reference in a new issue