summaryrefslogtreecommitdiff
path: root/kernel/fs/devfs.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-04-26 19:06:46 +0200
committerAnton Kling <anton@kling.gg>2024-04-26 19:06:46 +0200
commit7ab3153f92f38223157c4c1f4af1c30e33c94a76 (patch)
tree301f950cd6dc8fde244e9b5c1201ec01d964347b /kernel/fs/devfs.c
parent2e2805c88789c148cce0118d3a4ff0212458bb86 (diff)
Kernel/VFS: Change polling from variables to functions
Instead of having to store state in variables functions are called to check the object directly.
Diffstat (limited to 'kernel/fs/devfs.c')
-rw-r--r--kernel/fs/devfs.c24
1 files changed, 18 insertions, 6 deletions
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 <assert.h>
#include <drivers/keyboard.h>
#include <drivers/serial.h>
#include <fs/devfs.h>
@@ -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);
}