summaryrefslogtreecommitdiff
path: root/sys/fs/initramfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/initramfs.c')
-rw-r--r--sys/fs/initramfs.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/fs/initramfs.c b/sys/fs/initramfs.c
index b12a64b..beb2e84 100644
--- a/sys/fs/initramfs.c
+++ b/sys/fs/initramfs.c
@@ -61,12 +61,16 @@ struct initramfs_node {
* @magic: Header magic ("OMAR")
* @len: Length of the file
* @namelen: Length of the filename
+ * @rev: OMAR revision
+ * @mode: File permissions
*/
struct __packed omar_hdr {
char magic[4];
uint8_t type;
uint8_t namelen;
uint32_t len;
+ uint8_t rev;
+ uint32_t mode;
};
static volatile struct limine_module_request mod_req = {
@@ -140,7 +144,7 @@ initramfs_get_file(const char *path, struct initramfs_node *res)
p += hdr->namelen;
if (strcmp(namebuf, path) == 0) {
- node.mode = 0700;
+ node.mode = hdr->mode;
node.size = hdr->len;
node.data = (void *)p;
*res = node;
@@ -223,6 +227,8 @@ initramfs_read(struct vnode *vp, struct sio_txn *sio)
return -EIO;
if (sio->buf == NULL)
return -EIO;
+ if (sio->len > n->size)
+ sio->len = n->size;
src = n->data;
dest = sio->buf;
@@ -277,7 +283,8 @@ const struct vops g_initramfs_vops = {
.read = initramfs_read,
.write = NULL,
.reclaim = initramfs_reclaim,
- .getattr = initramfs_getattr
+ .getattr = initramfs_getattr,
+ .create = NULL,
};
const struct vfsops g_initramfs_vfsops = {