diff options
author | Ian Moffett <ian@osmora.org> | 2025-10-15 13:00:27 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-10-15 13:00:27 -0400 |
commit | 9970641f0ee8c80be660e2b49e63f6ed4e3b8859 (patch) | |
tree | 07b988e79e45757648335ecb2a3b600c9130eef9 | |
parent | 0cf3ec7ad8dae5ff969cd849d58de1e1a7bfe6d0 (diff) |
kern: omar: Implement VFS read vop
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | src/sys/os/os_omar.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/sys/os/os_omar.c b/src/sys/os/os_omar.c index 7416c4b..9ad3739 100644 --- a/src/sys/os/os_omar.c +++ b/src/sys/os/os_omar.c @@ -233,6 +233,37 @@ initrd_mount(struct fs_info *fip, struct mount_args *margs) return 0; } +static ssize_t +initrd_read(struct vop_rw_data *data) +{ + struct vnode *vp; + struct initrd_node *np; + char *src, *dest; + size_t len; + + if (data->data == NULL) { + return -EIO; + } + + if ((vp = data->vp) == NULL) { + return -EIO; + } + + if ((np = vp->data) == NULL) { + return -EIO; + } + + src = np->data; + dest = data->data; + len = MIN(data->len, np->size); + + for (int i = 0; i < len; ++i) { + dest[i] = src[i]; + } + + return len; +} + /* * Open an entry within the OMAR initrd * image. @@ -264,7 +295,8 @@ initrd_open(const char *path, char **res) } static struct vop omar_vops = { - .lookup = initrd_lookup + .lookup = initrd_lookup, + .read = initrd_read }; struct vfsops g_omar_vfsops = { |