BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / blob / master / vfs / devfs / super.c

// Related

Nucleus

Barry Small bug-fixes e59f635 (3 years, 2 months ago)
#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 = 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->nlink = 1;
	return inode;
}