diff options
| author | kaashoek <kaashoek> | 2006-08-20 03:08:54 +0000 | 
|---|---|---|
| committer | kaashoek <kaashoek> | 2006-08-20 03:08:54 +0000 | 
| commit | 16083d4462b9a57ec1e1fc81cea73da9479982a5 (patch) | |
| tree | cd20458cba2b461789ead3778c2b87de43fe976c | |
| parent | 8787cd01dfa6080d219f3dd7bbf03f3eb988a74e (diff) | |
| download | xv6-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
| -rw-r--r-- | defs.h | 1 | ||||
| -rw-r--r-- | fd.c | 6 | ||||
| -rw-r--r-- | syscall.c | 61 | ||||
| -rw-r--r-- | syscall.h | 28 | ||||
| -rw-r--r-- | user.h | 2 | ||||
| -rw-r--r-- | userfs.c | 2 | ||||
| -rw-r--r-- | usys.S | 2 | 
7 files changed, 43 insertions, 59 deletions
| @@ -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_stat(struct fd *fd, struct stat *);  void fd_incref(struct fd *fd); +int fd_dup(struct fd *fd);  // ide.c  void ide_init(void); @@ -149,3 +149,9 @@ fd_incref(struct fd *fd)    fd->ref++;    release(&fd_table_lock);  } + +int +fd_dup(struct fd *fd) +{ +  return -1; +} @@ -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 @@ -1,18 +1,18 @@  #define SYS_fork 1  #define SYS_exit 2  #define SYS_wait 3 -#define SYS_pipe 5 -#define SYS_write 6 -#define SYS_read 7 -#define SYS_close 8 -#define SYS_block 9 -#define SYS_kill 10 -#define SYS_exec 13 -#define SYS_open 14 -#define SYS_mknod 15 -#define SYS_unlink 16 -#define SYS_fstat 17 -#define SYS_link 18 -#define SYS_mkdir 19 -#define SYS_chdir 20 +#define SYS_pipe 4 +#define SYS_write 5 +#define SYS_read 6 +#define SYS_close 7 +#define SYS_kill 9 +#define SYS_exec 10 +#define SYS_open 11 +#define SYS_mknod 12 +#define SYS_unlink 13 +#define SYS_fstat 14 +#define SYS_link 15 +#define SYS_mkdir 16 +#define SYS_chdir 17 +#define SYS_dup 18 @@ -6,7 +6,6 @@ int pipe(int*);  int write(int, void*, int);  int read(int, void*, int);  int close(int); -int block(void);  int kill(int);  int panic(char*);  int cons_puts(char*); @@ -18,6 +17,7 @@ int fstat (int fd, struct stat *stat);  int link(char *, char *);  int mkdir(char *);  int chdir(char *); +int dup(int);  int stat(char *, struct stat *stat);  int puts(char*); @@ -20,8 +20,6 @@ main(void)    printf(stdout, "userfs is running\n"); -  block(); -    fd = open("echo", 0);    if(fd >= 0){      printf(stdout, "open echo ok\n"); @@ -15,7 +15,6 @@ STUB(pipe)  STUB(read)  STUB(write)  STUB(close) -STUB(block)  STUB(kill)  STUB(exec)  STUB(open) @@ -25,3 +24,4 @@ STUB(fstat)  STUB(link)  STUB(mkdir)  STUB(chdir) +STUB(dup) | 
