VFS types
struct vfs_mount_state_s
{
vfs_fs_open_t *open;
vfs_fs_lookup_t *lookup;
vfs_fs_create_t *create;
vfs_fs_link_t *link;
vfs_fs_unlink_t *unlink;
vfs_fs_stat_t *stat;
struct vfs_node_dir_s *old_node;
struct vfs_node_dir_s *root;
};
/* base object, inherited twice */
struct vfs_node_base_s
{
CONTAINER_ENTRY_TYPE(HASHLIST) hash_entry;
enum vfs_node_type_e type;
struct vfs_mount_state_s *mount;
char name[CONFIG_VFS_NAMELEN];
struct vfs_node_dir_s *parent;
};
struct vfs_node_dir_s
{
struct vfs_node_base_s base;
vfs_node_dir_entry_t obj_entry;
vfs_dir_hash_root_t children;
};
struct vfs_node_leaf_s
{
struct vfs_node_base_s base;
vfs_node_leaf_entry_t obj_entry;
};
/* opened file, it defines the operations */
struct vfs_file_s
{
struct vfs_node_s *node;
vfs_file_close_t *close;
vfs_file_read_t *read;
vfs_file_write_t *write;
vfs_file_seek_t *seek;
};
VFS operations
error_t vfs_mount(struct vfs_node_dir_s *mountpoint,
struct vfs_node_dir_s *fs_root);
error_t vfs_umount(struct vfs_node_dir_s *fs_root);
error_t vfs_node_lookup(struct vfs_node_dir_s *parent,
const char *name,
size_t namelen,
struct vfs_node_base_s **node);
error_t vfs_node_create(struct vfs_mount_state_s *fs,
enum vfs_node_type_e type,
struct vfs_node_base_s **node);
error_t vfs_node_link(struct vfs_node_dir_s *parent,
struct vfs_node_base_s *node,
const char *name,
size_t namelen);
error_t vfs_node_unlink(struct vfs_node_dir_s *parent,
const char *name,
size_t namelen);
error_t vfs_node_stat(struct vfs_node_base_s *node,
struct vfs_stat_s *stat);
error_t vfs_file_open(struct vfs_node_leaf_s *ref,
struct vfs_file_s **file);