Nucleus
Barry Device file system 88d672a (3 years, 3 months ago)
diff --git a/vfs/devfs/super.c b/vfs/devfs/super.c
new file mode 100644
index 0000000..bfab4e9
--- /dev/null
+++ b/vfs/devfs/super.c
@@ -0,0 +1,44 @@
+#include <sys/stat.h>
+#include <nucleus/vfs.h>
+
+extern InodeOps devfsInodeOps;
+extern FileOps devfsFileOps;
+
+Inode *devfs_alloc_inode(SuperBlock *sb);
+
+SuperOps devfsSuperOps = {
+ .alloc_inode = devfs_alloc_inode,
+};
+
+/* Mount a devfs instance */
+Inode *
+devfs_mount(FSType *type, int flags, const char *dev, void *data)
+{
+ static SuperBlock *super = NULL;
+ if (!super) {
+ super = new(&superBlockType);
+ super->type = get(type);
+ super->ops = &devfsSuperOps;
+ }
+
+ static Inode *inode = NULL;
+ if (!inode) {
+ Inode *inode = super_alloc_inode(super);
+ inode->mode = S_IFDIR | 0755;
+ super->root = inode;
+ }
+
+ return inode;
+}
+
+/* Allocate an inode */
+Inode *
+devfs_alloc_inode(SuperBlock *sb)
+{
+ Inode *inode = new(&inodeType);
+ inode->ops = &devfsInodeOps;
+ inode->fileOps = &devfsFileOps;
+ inode->super = get(sb);
+ inode->nlink = 1;
+ return inode;
+}