summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-27 14:37:13 +0000
committerrsc <rsc>2007-08-27 14:37:13 +0000
commit13491bf367a64f65cf77b8a8fbc89c146db4fae8 (patch)
tree03d4864b380c410c702d7d7880d2b9f12895f002 /file.c
parent1ccff18b2404e18fc889901f85b72777193c0b3f (diff)
downloadxv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.tar.gz
xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.tar.bz2
xv6-labs-13491bf367a64f65cf77b8a8fbc89c146db4fae8.zip
formatting shuffle
Diffstat (limited to 'file.c')
-rw-r--r--file.c81
1 files changed, 39 insertions, 42 deletions
diff --git a/file.c b/file.c
index 9bd6ece..273ba2a 100644
--- a/file.c
+++ b/file.c
@@ -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");
-}
-