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 /file.c | |
parent | 1ccff18b2404e18fc889901f85b72777193c0b3f (diff) | |
download | xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.tar.gz xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.tar.bz2 xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.zip |
formatting shuffle
Diffstat (limited to 'file.c')
-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"); -} - |