diff options
| author | rsc <rsc> | 2009-05-31 02:07:51 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2009-05-31 02:07:51 +0000 | 
| commit | f3685aa391431d5eafbc918e1d143dd731c64787 (patch) | |
| tree | 729cd8f2c7788e5fb87c84a3748760b5fd87e06b | |
| parent | 7f399ccaa4fb14527238be333fab207ae3a57856 (diff) | |
| download | xv6-labs-f3685aa391431d5eafbc918e1d143dd731c64787.tar.gz xv6-labs-f3685aa391431d5eafbc918e1d143dd731c64787.tar.bz2 xv6-labs-f3685aa391431d5eafbc918e1d143dd731c64787.zip | |
simplify
| -rw-r--r-- | file.h | 2 | ||||
| -rw-r--r-- | pipe.c | 8 | ||||
| -rw-r--r-- | sysfile.c | 35 | 
3 files changed, 16 insertions, 29 deletions
| @@ -1,5 +1,5 @@  struct file { -  enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_INODE } type; +  enum { FD_NONE, FD_PIPE, FD_INODE } type;    int ref; // reference count    char readable;    char writable; @@ -47,14 +47,10 @@ pipealloc(struct file **f0, struct file **f1)   bad:    if(p)      kfree((char*)p, PAGE); -  if(*f0){ -    (*f0)->type = FD_NONE; +  if(*f0)      fileclose(*f0); -  } -  if(*f1){ -    (*f1)->type = FD_NONE; +  if(*f1)      fileclose(*f1); -  }    return -1;  } @@ -127,17 +127,17 @@ sys_link(void)    iunlock(ip);    if((dp = nameiparent(new, name)) == 0) -    goto  bad; +    goto bad;    ilock(dp); -  if(dp->dev != ip->dev || dirlink(dp, name, ip->inum) < 0) +  if(dp->dev != ip->dev || dirlink(dp, name, ip->inum) < 0){ +    iunlockput(dp);      goto bad; +  }    iunlockput(dp);    iput(ip);    return 0;  bad: -  if(dp) -    iunlockput(dp);    ilock(ip);    ip->nlink--;    iupdate(ip); @@ -212,7 +212,7 @@ sys_unlink(void)  }  static struct inode* -create(char *path, int canexist, short type, short major, short minor) +create(char *path, short type, short major, short minor)  {    uint off;    struct inode *ip, *dp; @@ -222,10 +222,10 @@ create(char *path, int canexist, short type, short major, short minor)      return 0;    ilock(dp); -  if(canexist && (ip = dirlookup(dp, name, &off)) != 0){ +  if((ip = dirlookup(dp, name, &off)) != 0){      iunlockput(dp);      ilock(ip); -    if(ip->type != type || ip->major != major || ip->minor != minor){ +    if(ip->type != type || type != T_FILE){        iunlockput(ip);        return 0;      } @@ -250,17 +250,8 @@ create(char *path, int canexist, short type, short major, short minor)        panic("create dots");    } -  if(dirlink(dp, name, ip->inum) < 0){ -    if(type == T_DIR){ -      dp->nlink--; -      iupdate(dp); -    } -    iunlockput(dp); - -    ip->nlink = 0; -    iunlockput(ip); -    return 0; -  } +  if(dirlink(dp, name, ip->inum) < 0) +    panic("create: dirlink");    iunlockput(dp);    return ip; @@ -278,13 +269,13 @@ sys_open(void)      return -1;    if(omode & O_CREATE){ -    if((ip = create(path, 1, T_FILE, 0, 0)) == 0) +    if((ip = create(path, T_FILE, 0, 0)) == 0)        return -1;    } else {      if((ip = namei(path)) == 0)        return -1;      ilock(ip); -    if(ip->type == T_DIR && (omode & (O_RDWR|O_WRONLY))){ +    if(ip->type == T_DIR && omode != O_RDONLY){        iunlockput(ip);        return -1;      } @@ -318,7 +309,7 @@ sys_mknod(void)    if((len=argstr(0, &path)) < 0 ||       argint(1, &major) < 0 ||       argint(2, &minor) < 0 || -     (ip = create(path, 0, T_DEV, major, minor)) == 0) +     (ip = create(path, T_DEV, major, minor)) == 0)      return -1;    iunlockput(ip);    return 0; @@ -330,7 +321,7 @@ sys_mkdir(void)    char *path;    struct inode *ip; -  if(argstr(0, &path) < 0 || (ip = create(path, 0, T_DIR, 0, 0)) == 0) +  if(argstr(0, &path) < 0 || (ip = create(path, T_DIR, 0, 0)) == 0)      return -1;    iunlockput(ip);    return 0; | 
