X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/a5338b60e111972364a8bc6f07011c6defd213d2..eb1d71eb06e977f9ea61f6f43e5ce65342faf1cc:/lunaix-os/kernel/fs/twifs/twifs.c diff --git a/lunaix-os/kernel/fs/twifs/twifs.c b/lunaix-os/kernel/fs/twifs/twifs.c index f535084..1f061df 100644 --- a/lunaix-os/kernel/fs/twifs/twifs.c +++ b/lunaix-os/kernel/fs/twifs/twifs.c @@ -19,6 +19,8 @@ static struct twifs_node* fs_root; static struct cake_pile* twi_pile; +static volatile int32_t inode_id = 0; + int __twifs_dirlookup(struct v_inode* inode, struct v_dnode* dnode); @@ -32,7 +34,7 @@ struct v_inode* __twifs_create_inode(struct twifs_node* twi_node); int -__twifs_iterate_dir(struct v_file* file, struct dir_context* dctx); +__twifs_iterate_dir(struct v_inode* inode, struct dir_context* dctx); int __twifs_mount(struct v_superblock* vsb, struct v_dnode* mount_point); @@ -44,10 +46,10 @@ int __twifs_rmstuff(struct v_inode* inode); int -__twifs_fwrite(struct v_file* file, void* buffer, size_t len, size_t fpos); +__twifs_fwrite(struct v_inode* inode, void* buffer, size_t len, size_t fpos); int -__twifs_fread(struct v_file* file, void* buffer, size_t len, size_t fpos); +__twifs_fread(struct v_inode* inode, void* buffer, size_t len, size_t fpos); void twifs_init() @@ -58,6 +60,7 @@ twifs_init() twifs->fs_name = HSTR("twifs", 5); twifs->mount = __twifs_mount; twifs->types = FSTYPE_ROFS; + twifs->fs_id = 0; fsm_register(twifs); @@ -164,14 +167,14 @@ __twifs_mount(struct v_superblock* vsb, struct v_dnode* mount_point) struct v_inode* __twifs_create_inode(struct twifs_node* twi_node) { - struct v_inode* inode = vfs_i_alloc(); - *inode = (struct v_inode){ .ctime = 0, - .itype = twi_node->itype, - .lb_addr = 0, - .lb_usage = 0, - .data = twi_node, - .mtime = 0, - .open_count = 0 }; + struct v_inode* inode = vfs_i_alloc(1, inode_id++); + inode->itype = twi_node->itype; + inode->data = twi_node; + + inode->ctime = clock_unixtime(); + inode->atime = inode->ctime; + inode->mtime = inode->ctime; + inode->ops.dir_lookup = __twifs_dirlookup; inode->ops.mkdir = __twifs_mkdir; inode->ops.unlink = __twifs_rmstuff; @@ -186,23 +189,23 @@ __twifs_create_inode(struct twifs_node* twi_node) } int -__twifs_fwrite(struct v_file* file, void* buffer, size_t len, size_t fpos) +__twifs_fwrite(struct v_inode* inode, void* buffer, size_t len, size_t fpos) { - struct twifs_node* twi_node = (struct twifs_node*)file->inode->data; + struct twifs_node* twi_node = (struct twifs_node*)inode->data; if (!twi_node || !twi_node->ops.write) { return ENOTSUP; } - return twi_node->ops.write(file, buffer, len, fpos); + return twi_node->ops.write(inode, buffer, len, fpos); } int -__twifs_fread(struct v_file* file, void* buffer, size_t len, size_t fpos) +__twifs_fread(struct v_inode* inode, void* buffer, size_t len, size_t fpos) { - struct twifs_node* twi_node = (struct twifs_node*)file->inode->data; + struct twifs_node* twi_node = (struct twifs_node*)inode->data; if (!twi_node || !twi_node->ops.read) { return ENOTSUP; } - return twi_node->ops.read(file, buffer, len, fpos); + return twi_node->ops.read(inode, buffer, len, fpos); } struct twifs_node* @@ -246,9 +249,9 @@ __twifs_dirlookup(struct v_inode* inode, struct v_dnode* dnode) } int -__twifs_iterate_dir(struct v_file* file, struct dir_context* dctx) +__twifs_iterate_dir(struct v_inode* inode, struct dir_context* dctx) { - struct twifs_node* twi_node = (struct twifs_node*)(file->inode->data); + struct twifs_node* twi_node = (struct twifs_node*)(inode->data); int counter = 0; struct twifs_node *pos, *n;