/* * This file handles mounting various file systems into the VFS. This is the * mount system call. */ #include #include #include #include #include #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; }