diff options
| author | rsc <rsc> | 2007-08-27 14:37:13 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-08-27 14:37:13 +0000 | 
| commit | 13491bf367a64f65cf77b8a8fbc89c146db4fae8 (patch) | |
| tree | 03d4864b380c410c702d7d7880d2b9f12895f002 | |
| parent | 1ccff18b2404e18fc889901f85b72777193c0b3f (diff) | |
| download | xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.tar.gz xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.tar.bz2 xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.zip | |
formatting shuffle
| -rw-r--r-- | file.c | 81 | 
1 files changed, 39 insertions, 42 deletions
| @@ -52,6 +52,45 @@ filedup(struct file *f)    return f;  } +// Close file f.  (Decrement ref count, close when reaches 0.) +void +fileclose(struct file *f) +{ +  struct file ff; + +  acquire(&file_table_lock); +  if(f->ref < 1 || f->type == FD_CLOSED) +    panic("fileclose"); +  if(--f->ref > 0){ +    release(&file_table_lock); +    return; +  } +  ff = *f; +  f->ref = 0; +  f->type = FD_CLOSED; +  release(&file_table_lock); +   +  if(ff.type == FD_PIPE) +    pipe_close(ff.pipe, ff.writable); +  else if(ff.type == FD_INODE) +    iput(ff.ip); +  else +    panic("fileclose"); +} + +// Get metadata about file f. +int +filestat(struct file *f, struct stat *st) +{ +  if(f->type == FD_INODE){ +    ilock(f->ip); +    stati(f->ip, st); +    iunlock(f->ip); +    return 0; +  } +  return -1; +} +  // Read from file f.  Addr is kernel address.  int  fileread(struct file *f, char *addr, int n) @@ -92,45 +131,3 @@ filewrite(struct file *f, char *addr, int n)    panic("filewrite");  } -// Get metadata about file f. -int -filestat(struct file *f, struct stat *st) -{ -  if(f->type == FD_INODE){ -    ilock(f->ip); -    stati(f->ip, st); -    iunlock(f->ip); -    return 0; -  } -  return -1; -} - -// Close file f.  (Decrement ref count, close when reaches 0.) -void -fileclose(struct file *f) -{ -  struct file ff; - -  acquire(&file_table_lock); - -  if(f->ref < 1 || f->type == FD_CLOSED) -    panic("fileclose"); - -  if(--f->ref > 0){ -    release(&file_table_lock); -    return; -  } -   -  ff = *f; -  f->ref = 0; -  f->type = FD_CLOSED; -  release(&file_table_lock); -   -  if(ff.type == FD_PIPE) -    pipe_close(ff.pipe, ff.writable); -  else if(ff.type == FD_INODE) -    iput(ff.ip); -  else -    panic("fileclose"); -} - | 
