BarryServer : Git

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

// Related

Nucleus

Barry FS Object wrapper functions 77a8df8 (3 years, 3 months ago)
/*
 * This file handles mounting various file systems into the VFS.  This is the
 * mount system call.
 */

#include <string.h>
#include <errno.h>
#include <nucleus/memory.h>
#include <nucleus/task.h>
#include <nucleus/vfs.h>
#include "namespace.h"

int mount_fstype(const char *name, int flags, const char *src, void *data,
                 Inode **root);

/* Mount a file system */
int
mount(const char *src, const char *target, const char *type,
      unsigned long flags, void *data)
{
	if (!verify_access(src, strnlen(src, PATH_MAX), PROT_READ))
		return -EFAULT;
	if (!verify_access(target, strnlen(target, PATH_MAX), PROT_READ))
		return -EFAULT;
	if (!verify_access(type, strnlen(type, 16), PROT_READ))
		return -EFAULT;

	Inode *mnt = NULL;
	int res = mount_fstype(type, flags, src, data, &mnt);
	if (res < 0)
		return res;
	if (!mnt)
		return -ENODEV;

	/* Mount as VFS root */
	if (!target && !current->fs->root) {
		current->fs->root = get(mnt);
		current->fs->cwd = get(mnt);
		return 0;
	}

	return 0;
}