BarryServer : Git

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

// Related

Nucleus

Barry System headers (remove libc dependency) 18495cf (3 years, 2 months ago)
/*
 * This file controls the Virtual File System for the kernel.  It implements a
 * generic File System, which can hook other File Systems.  This forms a key
 * part of the kernel, and is used for loading programs and some higher-level
 * IPC and device management.
 */

#include <sys/mount.h>
#include <sys/stat.h>
#include <nucleus/object.h>
#include <nucleus/vfs.h>

extern FileOps tmpfsFileOps;

Inode *tmpfs_mount(FSType *type, int flags, const char *dev, void *data);
Inode *devfs_mount(FSType *type, int flags, const char *dev, void *data);
Inode *ext2fs_mount(FSType *type, int flags, const char *dev, void *data);

/* Initialise the Virtual File System */
void
init_vfs(void)
{
	register_fstype("tmpfs", tmpfs_mount);
	register_fstype("devfs", devfs_mount);
	register_fstype("ext2fs", ext2fs_mount);

	mount("tmpfs", NULL, "tmpfs", 0, NULL);
	mkdir("dev", 0755);
	mount("devfs", "/dev", "devfs", 0, NULL);
}

/* Create an anonymous file */
File *
create_anonymous_file(void)
{
	File *file = new(&fileType);
	file->inode = new(&inodeType);
	file->ops = &tmpfsFileOps;
	return file;
}