BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 88d672affcc1b9e1de646809e06bca1737f94f25 / vfs / devfs / super.c

// Related

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;
+}