﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	resolution	keywords	cc
2	Rework VFS	Nicolas Pouillon	Nicolas Pouillon	"= 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);
}}}
"	task	assigned	minor		libvfs			
