#pragma once #include #include struct vnode; #define VN_FILE 1 #define VN_DIR 2 typedef uint32_t vnode_type_t; typedef struct vnode_ops { int (*read)(struct vnode *vn, void *buf, size_t off, size_t size); struct vnode *(*lookup)(struct vnode *vn, const char *name); } vnode_ops_t; typedef struct vnode { char name[256]; vnode_type_t type; uint32_t refcount; // struct vnode* parent; // struct vnode* child; // struct vnode* next; struct vnode_ops *ops; void *internal; } vnode_t; typedef struct mountpoint { char name[32]; struct fs *fs; vnode_t *mountpoint; } mountpoint_t; typedef struct fs { char name[32]; struct vnode *root; int (*mount)(struct vnode *mountpoint); } fs_t; void vfs_init(void); int vfs_mount(char *path, fs_t *fs); int vfs_unmount(char *path); int vfs_open(const char *path, vnode_t **result); int vfs_read(vnode_t *vn, void *buf, size_t off, size_t size);