summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-10-15 13:00:27 -0400
committerIan Moffett <ian@osmora.org>2025-10-15 13:00:27 -0400
commit9970641f0ee8c80be660e2b49e63f6ed4e3b8859 (patch)
tree07b988e79e45757648335ecb2a3b600c9130eef9
parent0cf3ec7ad8dae5ff969cd849d58de1e1a7bfe6d0 (diff)
kern: omar: Implement VFS read vop
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--src/sys/os/os_omar.c34
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 = {