X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/847763577fbcc79179722874c81b44ee36108edb..b58b151ff3f69422ba1d553f66455700cd3c204b:/lunaix-os/includes/lunaix/fs.h diff --git a/lunaix-os/includes/lunaix/fs.h b/lunaix-os/includes/lunaix/fs.h index fffb26f..bc22fd5 100644 --- a/lunaix-os/includes/lunaix/fs.h +++ b/lunaix-os/includes/lunaix/fs.h @@ -13,7 +13,8 @@ #define VFS_INODE_TYPE_DIR 0x1 #define VFS_INODE_TYPE_FILE 0x2 -#define VFS_INODE_TYPE_DEVICE 0x3 +#define VFS_INODE_TYPE_DEVICE 0x4 +#define VFS_INODE_TYPE_SYMLINK 0x8 #define VFS_ENOFS -2 #define VFS_EBADMNT -3 @@ -26,6 +27,7 @@ #define VFS_WALK_MKPARENT 0x1 #define VFS_WALK_FSRELATIVE 0x2 #define VFS_WALK_PARENT 0x4 +#define VFS_WALK_NOFOLLOW 0x4 #define VFS_IOBUF_FDIRTY 0x1 @@ -100,6 +102,7 @@ struct v_fd { struct v_file* file; int pos; + int flags; }; struct v_inode @@ -109,18 +112,22 @@ struct v_inode uint32_t mtime; uint64_t lb_addr; uint32_t open_count; + uint32_t link_count; uint32_t lb_usage; uint32_t fsize; void* data; // 允许底层FS绑定他的一些专有数据 struct { - int (*create)(struct v_inode* inode, struct v_file* file); - int (*open)(struct v_inode* inode, struct v_file* file); - int (*sync)(struct v_inode* inode); - int (*mkdir)(struct v_inode* inode, struct v_dnode* dnode); - int (*rmdir)(struct v_inode* inode); - int (*unlink)(struct v_inode* inode); - int (*dir_lookup)(struct v_inode* inode, struct v_dnode* dnode); + int (*create)(struct v_inode* this, struct v_file* file); + int (*open)(struct v_inode* this, struct v_file* file); + int (*sync)(struct v_inode* this); + int (*mkdir)(struct v_inode* this, struct v_dnode* dnode); + int (*rmdir)(struct v_inode* this); + int (*unlink)(struct v_inode* this); + int (*link)(struct v_inode* this, struct v_dnode* new_name); + int (*read_symlink)(struct v_inode* this, const char** path_out); + int (*symlink)(struct v_inode* this, const char* target); + int (*dir_lookup)(struct v_inode* this, struct v_dnode* dnode); } ops; };