/* * This file implements the FSType object. Objects of this type represent * different file-system types (e.g. ext2fs, tmpfs). They exist to be iterated * by the VFS to keep track of the installed file systems. */ #include #include #include #include /* Structure for a File System Type */ struct FSType { Object obj; const char *name; Inode *(*mount)(FSType *, int, const char *, void *); }; /* File System Type object type */ ObjectType fstypeType = { .name = "FILE SYSTEM TYPE", .size = sizeof(FSType), }; /* Create a new file system type */ void register_fstype(const char *name, mount_callback_t mount) { FSType *fstype = new(&fstypeType); fstype->name = name; fstype->mount = mount; } /* Mount file system type by name */ int mount_fstype(const char *name, int flags, const char *src, void *data, Inode **root) { FSType *type; foreach (fstypeType.objects, type) { if (!strcmp(type->name, name)) break; } if (!type) return -ENODEV; *root = type->mount(type, flags, src, data); return 0; }