Adds /dev/null
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 4 Oct 2011 23:30:21 +0000 (16:30 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:08 +0000 (17:36 -0700)
To the ghetto devfs.  Needed by BB for some job management for some
reason.

kern/src/devfs.c

index 11f6670..4a6817a 100644 (file)
@@ -18,8 +18,9 @@
 /* These structs are declared again and initialized farther down */
 struct file_operations dev_f_op_stdin;
 struct file_operations dev_f_op_stdout;
+struct file_operations dev_f_op_null;
 
-struct file *dev_stdin, *dev_stdout, *dev_stderr;
+struct file *dev_stdin, *dev_stdout, *dev_stderr, *dev_null;
 
 void devfs_init(void)
 {
@@ -39,6 +40,8 @@ void devfs_init(void)
        /* Note stderr uses the same f_op as stdout */
        dev_stderr = make_device("/dev/stderr", S_IWUSR | S_IWGRP | S_IWOTH,
                                 __S_IFCHR, &dev_f_op_stdout);
+       dev_null = make_device("/dev/null", S_IWUSR | S_IWGRP | S_IWOTH,
+                              __S_IFCHR, &dev_f_op_null);
 }
 
 /* Creates a device node at a given location in the FS-tree */
@@ -140,3 +143,27 @@ struct file_operations dev_f_op_stdout = {
        kfs_sendpage,
        kfs_check_flags,
 };
+
+/* /dev/null: just take whatever was given and pretend it was written */
+ssize_t dev_null_write(struct file *file, const char *buf, size_t count,
+                       off_t *offset)
+{
+       return count;
+}
+
+struct file_operations dev_f_op_null = {
+       dev_c_llseek,
+       0,      /* read - can't read null */
+       dev_null_write,
+       kfs_readdir,    /* this will fail gracefully */
+       dev_mmap,
+       kfs_open,
+       kfs_flush,
+       kfs_release,
+       0,      /* fsync - makes no sense */
+       kfs_poll,
+       0,      /* readv */
+       0,      /* writev */
+       kfs_sendpage,
+       kfs_check_flags,
+};