#ifndef _NUCLEUS_VFS_H #define _NUCLEUS_VFS_H #include #include #include #include typedef struct FSType FSType; typedef struct FileSystem FileSystem; typedef struct SuperBlock SuperBlock; typedef struct SuperOps SuperOps; typedef struct Inode Inode; typedef struct InodeOps InodeOps; typedef Inode *(*mount_callback_t)(FSType *, int, const char *, void *); /* Structure for a Super Block */ struct SuperBlock { Object obj; FSType *type; SuperOps *ops; Inode *root; ObjectList *inodes; /* List of cached inodes */ void *data; }; struct SuperOps { Inode *(*alloc_inode)(SuperBlock *); int (*write_inode)(Inode *); void (*delete_inode)(Inode *); }; /* Structure for an Inode */ struct Inode { Object obj; ino_t ino; uid_t uid; gid_t gid; mode_t mode; nlink_t nlink; size_t size; dev_t dev; InodeOps *ops; SuperBlock *super; union { ObjectList *pages; }; }; struct InodeOps { }; extern ObjectType fstypeType; extern ObjectType fsType; extern ObjectType inodeType; void init_vfs(void); void register_fstype(const char *name, mount_callback_t mount); int mount(const char *src, const char *target, const char *type, unsigned long flags, void *data); #endif