]> Devi Nivas Git - cs3210-lab0.git/commitdiff
fd.* -> file.*
authorrsc <rsc>
Wed, 6 Sep 2006 18:40:28 +0000 (18:40 +0000)
committerrsc <rsc>
Wed, 6 Sep 2006 18:40:28 +0000 (18:40 +0000)
Makefile
fd.c [deleted file]
fd.h [deleted file]
file.c [new file with mode: 0644]
file.h [new file with mode: 0644]
pipe.c
proc.c
syscall.c
sysfile.c
sysproc.c

index 9d1e1d6feb08a957ace2e0dabbeb6a5cf02619cf..ae45363b8719f6bb17d95b90f6a2dfc453be5488 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 OBJS = \
        console.o\
-       fd.o\
+       file.o\
        ide.o\
        kalloc.o\
        lapic.o\
@@ -66,7 +66,7 @@ PRINT =       \
        bootasm.S bootother.S main.c init.c spinlock.c\
        proc.h proc.c setjmp.S kalloc.c\
        syscall.h trapasm.S traps.h trap.c vectors.pl syscall.c\
-       buf.h dev.h fcntl.h stat.h fd.h fs.h fsvar.h fd.c fs.c bio.c ide.c\
+       buf.h dev.h fcntl.h stat.h file.h fs.h fsvar.h fd.c fs.c bio.c ide.c\
        pipe.c\
        mp.h ioapic.h mp.c lapic.c ioapic.c picirq.c\
        console.c\
diff --git a/fd.c b/fd.c
deleted file mode 100644 (file)
index 9ec3038..0000000
--- a/fd.c
+++ /dev/null
@@ -1,150 +0,0 @@
-#include "types.h"
-#include "stat.h"
-#include "param.h"
-#include "x86.h"
-#include "mmu.h"
-#include "proc.h"
-#include "defs.h"
-#include "fd.h"
-#include "spinlock.h"
-#include "dev.h"
-#include "fs.h"
-#include "fsvar.h"
-
-struct spinlock fd_table_lock;
-struct devsw devsw[NDEV];
-
-struct file file[NFILE];
-
-void
-fd_init(void)
-{
-  initlock(&fd_table_lock, "fd_table");
-}
-
-// Allocate a file descriptor number for curproc.
-int
-fd_ualloc(void)
-{
-  int fd;
-  struct proc *p = curproc[cpu()];
-  for(fd = 0; fd < NOFILE; fd++)
-    if(p->ofile[fd] == 0)
-      return fd;
-  return -1;
-}
-
-// Allocate a file descriptor structure
-struct file*
-fd_alloc(void)
-{
-  int i;
-
-  acquire(&fd_table_lock);
-  for(i = 0; i < NFILE; i++){
-    if(file[i].type == FD_CLOSED){
-      file[i].type = FD_NONE;
-      file[i].ref = 1;
-      release(&fd_table_lock);
-      return file + i;
-    }
-  }
-  release(&fd_table_lock);
-  return 0;
-}
-
-// Write to file descriptor;
-// addr is a kernel address, pointing into some process's p->mem.
-int
-fd_write(struct file *fd, char *addr, int n)
-{
-  if(fd->writable == 0)
-    return -1;
-  if(fd->type == FD_PIPE){
-    return pipe_write(fd->pipe, addr, n);
-  } else if(fd->type == FD_FILE) {
-    ilock(fd->ip);
-    int r = writei(fd->ip, addr, fd->off, n);
-    if(r > 0) {
-      fd->off += r;
-    }
-    iunlock(fd->ip);
-    return r;
-  } else {
-    panic("fd_write");
-    return -1;
-  }
-}
-
-// Read from file descriptor.
-int
-fd_read(struct file *fd, char *addr, int n)
-{
-  if(fd->readable == 0)
-    return -1;
-  if(fd->type == FD_PIPE){
-    return pipe_read(fd->pipe, addr, n);
-  } else if(fd->type == FD_FILE){
-    ilock(fd->ip);
-    int cc = readi(fd->ip, addr, fd->off, n);
-    if(cc > 0)
-      fd->off += cc;
-    iunlock(fd->ip);
-    return cc;
-  } else {
-    panic("fd_read");
-    return -1;
-  }
-}
-
-// Close file descriptor.
-void
-fd_close(struct file *fd)
-{
-  acquire(&fd_table_lock);
-
-  if(fd->ref < 1 || fd->type == FD_CLOSED)
-    panic("fd_close");
-
-  if(--fd->ref == 0){
-    struct file dummy = *fd;
-
-    fd->ref = 0;
-    fd->type = FD_CLOSED;
-    release(&fd_table_lock);
-
-    if(dummy.type == FD_PIPE){
-      pipe_close(dummy.pipe, dummy.writable);
-    } else if(dummy.type == FD_FILE){
-      idecref(dummy.ip);
-    } else {
-      panic("fd_close");
-    }
-  } else {
-    release(&fd_table_lock);
-  }
-}
-
-// Get metadata about file descriptor.
-int
-fd_stat(struct file *fd, struct stat *st)
-{
-  if(fd->type == FD_FILE){
-    ilock(fd->ip);
-    stati(fd->ip, st);
-    iunlock(fd->ip);
-    return 0;
-  } else
-    return -1;
-}
-
-// Increment file descriptor reference count.
-void
-fd_incref(struct file *fd)
-{
-  acquire(&fd_table_lock);
-  if(fd->ref < 1 || fd->type == FD_CLOSED)
-    panic("fd_incref");
-  fd->ref++;
-  release(&fd_table_lock);
-}
diff --git a/fd.h b/fd.h
deleted file mode 100644 (file)
index 15d6b78..0000000
--- a/fd.h
+++ /dev/null
@@ -1,9 +0,0 @@
-struct file {
-  enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_FILE } type;
-  int ref; // reference count
-  char readable;
-  char writable;
-  struct pipe *pipe;
-  struct inode *ip;
-  uint off;
-};
diff --git a/file.c b/file.c
new file mode 100644 (file)
index 0000000..fd04383
--- /dev/null
+++ b/file.c
@@ -0,0 +1,150 @@
+#include "types.h"
+#include "stat.h"
+#include "param.h"
+#include "x86.h"
+#include "mmu.h"
+#include "proc.h"
+#include "defs.h"
+#include "file.h"
+#include "spinlock.h"
+#include "dev.h"
+#include "fs.h"
+#include "fsvar.h"
+
+struct spinlock fd_table_lock;
+struct devsw devsw[NDEV];
+
+struct file file[NFILE];
+
+void
+fd_init(void)
+{
+  initlock(&fd_table_lock, "fd_table");
+}
+
+// Allocate a file descriptor number for curproc.
+int
+fd_ualloc(void)
+{
+  int fd;
+  struct proc *p = curproc[cpu()];
+  for(fd = 0; fd < NOFILE; fd++)
+    if(p->ofile[fd] == 0)
+      return fd;
+  return -1;
+}
+
+// Allocate a file descriptor structure
+struct file*
+fd_alloc(void)
+{
+  int i;
+
+  acquire(&fd_table_lock);
+  for(i = 0; i < NFILE; i++){
+    if(file[i].type == FD_CLOSED){
+      file[i].type = FD_NONE;
+      file[i].ref = 1;
+      release(&fd_table_lock);
+      return file + i;
+    }
+  }
+  release(&fd_table_lock);
+  return 0;
+}
+
+// Write to file descriptor;
+// addr is a kernel address, pointing into some process's p->mem.
+int
+fd_write(struct file *fd, char *addr, int n)
+{
+  if(fd->writable == 0)
+    return -1;
+  if(fd->type == FD_PIPE){
+    return pipe_write(fd->pipe, addr, n);
+  } else if(fd->type == FD_FILE) {
+    ilock(fd->ip);
+    int r = writei(fd->ip, addr, fd->off, n);
+    if(r > 0) {
+      fd->off += r;
+    }
+    iunlock(fd->ip);
+    return r;
+  } else {
+    panic("fd_write");
+    return -1;
+  }
+}
+
+// Read from file descriptor.
+int
+fd_read(struct file *fd, char *addr, int n)
+{
+  if(fd->readable == 0)
+    return -1;
+  if(fd->type == FD_PIPE){
+    return pipe_read(fd->pipe, addr, n);
+  } else if(fd->type == FD_FILE){
+    ilock(fd->ip);
+    int cc = readi(fd->ip, addr, fd->off, n);
+    if(cc > 0)
+      fd->off += cc;
+    iunlock(fd->ip);
+    return cc;
+  } else {
+    panic("fd_read");
+    return -1;
+  }
+}
+
+// Close file descriptor.
+void
+fd_close(struct file *fd)
+{
+  acquire(&fd_table_lock);
+
+  if(fd->ref < 1 || fd->type == FD_CLOSED)
+    panic("fd_close");
+
+  if(--fd->ref == 0){
+    struct file dummy = *fd;
+
+    fd->ref = 0;
+    fd->type = FD_CLOSED;
+    release(&fd_table_lock);
+
+    if(dummy.type == FD_PIPE){
+      pipe_close(dummy.pipe, dummy.writable);
+    } else if(dummy.type == FD_FILE){
+      idecref(dummy.ip);
+    } else {
+      panic("fd_close");
+    }
+  } else {
+    release(&fd_table_lock);
+  }
+}
+
+// Get metadata about file descriptor.
+int
+fd_stat(struct file *fd, struct stat *st)
+{
+  if(fd->type == FD_FILE){
+    ilock(fd->ip);
+    stati(fd->ip, st);
+    iunlock(fd->ip);
+    return 0;
+  } else
+    return -1;
+}
+
+// Increment file descriptor reference count.
+void
+fd_incref(struct file *fd)
+{
+  acquire(&fd_table_lock);
+  if(fd->ref < 1 || fd->type == FD_CLOSED)
+    panic("fd_incref");
+  fd->ref++;
+  release(&fd_table_lock);
+}
diff --git a/file.h b/file.h
new file mode 100644 (file)
index 0000000..15d6b78
--- /dev/null
+++ b/file.h
@@ -0,0 +1,9 @@
+struct file {
+  enum { FD_CLOSED, FD_NONE, FD_PIPE, FD_FILE } type;
+  int ref; // reference count
+  char readable;
+  char writable;
+  struct pipe *pipe;
+  struct inode *ip;
+  uint off;
+};
diff --git a/pipe.c b/pipe.c
index 2864432536bf07d78f4472087cfaf33b1958e42c..3b2f6b8bb164f5af4f090b4eafa6c8ca56a2fc49 100644 (file)
--- a/pipe.c
+++ b/pipe.c
@@ -4,7 +4,7 @@
 #include "mmu.h"
 #include "proc.h"
 #include "defs.h"
-#include "fd.h"
+#include "file.h"
 #include "spinlock.h"
 
 #define PIPESIZE 512
diff --git a/proc.c b/proc.c
index 066ac770d7930827286bc08f7510dc430eadc01c..34b353ba396f40cde5b190bef0bfa8cf1014a4d9 100644 (file)
--- a/proc.c
+++ b/proc.c
@@ -2,7 +2,7 @@
 #include "mmu.h"
 #include "x86.h"
 #include "param.h"
-#include "fd.h"
+#include "file.h"
 #include "proc.h"
 #include "defs.h"
 #include "spinlock.h"
index f75714afd5a418d78f6ff67c1f5e681fb36db8c7..4cff057b74c0be0d150c351cdb2b13739a4a344c 100644 (file)
--- a/syscall.c
+++ b/syscall.c
@@ -12,7 +12,7 @@
 #include "fs.h"
 #include "fsvar.h"
 #include "elf.h"
-#include "fd.h"
+#include "file.h"
 #include "fcntl.h"
 
 // User code makes a system call with INT T_SYSCALL.
index d123a96dc5f04b69a83852187f8bf38a1aebb15b..d0c7afaf52688a6527a49bb5bfadd903e19d5625 100644 (file)
--- a/sysfile.c
+++ b/sysfile.c
@@ -12,7 +12,7 @@
 #include "fs.h"
 #include "fsvar.h"
 #include "elf.h"
-#include "fd.h"
+#include "file.h"
 #include "fcntl.h"
 
 int
index f648c0eaaa966ceab7cc620cf9c5937a88b78b2d..43ee973f416374d6451766ba4e1ca53b1f2a2ac9 100644 (file)
--- a/sysproc.c
+++ b/sysproc.c
@@ -12,7 +12,7 @@
 #include "fs.h"
 #include "fsvar.h"
 #include "elf.h"
-#include "fd.h"
+#include "file.h"
 #include "fcntl.h"
 
 int