From 7ab3153f92f38223157c4c1f4af1c30e33c94a76 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Fri, 26 Apr 2024 19:06:46 +0200 Subject: Kernel/VFS: Change polling from variables to functions Instead of having to store state in variables functions are called to check the object directly. --- kernel/fs/devfs.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'kernel/fs/devfs.c') diff --git a/kernel/fs/devfs.c b/kernel/fs/devfs.c index c25c996..8139448 100644 --- a/kernel/fs/devfs.c +++ b/kernel/fs/devfs.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -10,8 +11,9 @@ int num_files = 0; vfs_inode_t *devfs_add_file( char *path, int (*read)(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd), int (*write)(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd), - vfs_vm_object_t *(get_vm_object)(u64 length, u64 offset, vfs_fd_t *fd), - u8 has_data, u8 can_write, int type) { + vfs_vm_object_t *(*get_vm_object)(u64 length, u64 offset, vfs_fd_t *fd), + int (*has_data)(vfs_inode_t *inode), int (*can_write)(vfs_inode_t *inode), + int type) { files[num_files].name = copy_and_allocate_string(path); vfs_inode_t *i = kcalloc(1, sizeof(vfs_inode_t)); @@ -21,9 +23,9 @@ vfs_inode_t *devfs_add_file( i->write = write; i->close = NULL; i->get_vm_object = get_vm_object; - i->has_data = has_data; + i->_has_data = has_data; + i->_can_write = can_write; i->is_open = 1; - i->can_write = can_write; i->ref = 1; num_files++; return i; @@ -73,13 +75,23 @@ int serial_write(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) { return rc; } +int always_has_data(vfs_inode_t *inode) { + (void)inode; + return 1; +} + +int always_can_write(vfs_inode_t *inode) { + (void)inode; + return 1; +} + void add_serial(void) { - devfs_add_file("/serial", NULL, serial_write, NULL, 0, 1, + devfs_add_file("/serial", NULL, serial_write, NULL, NULL, always_can_write, FS_TYPE_CHAR_DEVICE); } void add_stdout(void) { - devfs_add_file("/stdout", NULL, stdout_write, NULL, 0, 1, + devfs_add_file("/stdout", NULL, stdout_write, NULL, NULL, always_can_write, FS_TYPE_CHAR_DEVICE); } -- cgit v1.2.3