aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/fs/initrd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/fs/initrd.c')
-rw-r--r--src/kernel/fs/initrd.c131
1 files changed, 0 insertions, 131 deletions
diff --git a/src/kernel/fs/initrd.c b/src/kernel/fs/initrd.c
deleted file mode 100644
index acaceb8..0000000
--- a/src/kernel/fs/initrd.c
+++ /dev/null
@@ -1,131 +0,0 @@
-#include <stdint.h>
-#include <kernel/fs/initrd.h>
-#include <kernel/fs/vfs.h>
-#include <kernel/lib/lib.h>
-#include <kernel/lib/alloc.h>
-#include <kernel/io/io.h>
-#include <kernel/graphics/vesa.h>
-
-initrd_header_t *initrd_header;
-initrd_file_header_t *file_headers;
-fs_node_t *initrd_root;
-fs_node_t *initrd_dev;
-fs_node_t *root_nodes;
-int nroot_nodes;
-
-struct dirent dirent;
-
-static uint32_t initrd_read(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer) {
- initrd_file_header_t header = file_headers[node->inode];
- if (offset > header.length)
- return 0;
- if (offset + size > header.length)
- size = header.length - offset;
- memcpy(buffer, (uint8_t *) (header.offset + offset), size);
- return size;
-}
-
-static struct dirent *initrd_readdir(fs_node_t *node, uint32_t index) {
- if (node == initrd_root && index == 0) {
- strcpy(dirent.name, "dev");
- dirent.name[3] = 0;
- dirent.ino = 0;
- return &dirent;
- }
-
- if (index - 1 >= (uint32_t) nroot_nodes)
- return 0;
- strcpy(dirent.name, root_nodes[index - 1].name);
- dirent.name[strlen(root_nodes[index - 1].name)] = 0;
- dirent.ino = root_nodes[index - 1].inode;
- return &dirent;
-}
-
-static fs_node_t *initrd_finddir(fs_node_t *node, char *name) {
- if (node == initrd_root &&
- !strcmp(name, "dev"))
- return initrd_dev;
-
- int i;
- for (i = 0; i < nroot_nodes; i++)
- if (!strcmp(name, root_nodes[i].name))
- return &root_nodes[i];
- return 0;
-}
-
-fs_node_t *initialise_initrd(uint32_t location) {
- initrd_header = (initrd_header_t *) location;
- file_headers = (initrd_file_header_t *) (location + sizeof(initrd_header_t));
-
- initrd_root = (fs_node_t *) kmalloc(sizeof(fs_node_t));
- strcpy(initrd_root->name, "initrd");
- initrd_root->mask = initrd_root->uid = initrd_root->gid = initrd_root->inode = initrd_root->length = 0;
- initrd_root->flags = FS_DIRECTORY;
- initrd_root->read = 0;
- initrd_root->write = 0;
- initrd_root->open = 0;
- initrd_root->close = 0;
- initrd_root->readdir = &initrd_readdir;
- initrd_root->finddir = &initrd_finddir;
- initrd_root->ptr = 0;
- initrd_root->impl = 0;
-
- initrd_dev = (fs_node_t *) kmalloc(sizeof(fs_node_t));
- strcpy(initrd_dev->name, "dev");
- initrd_dev->mask = initrd_dev->uid = initrd_dev->gid = initrd_dev->inode = initrd_dev->length = 0;
- initrd_dev->flags = FS_DIRECTORY;
- initrd_dev->read = 0;
- initrd_dev->write = 0;
- initrd_dev->open = 0;
- initrd_dev->close = 0;
- initrd_dev->readdir = &initrd_readdir;
- initrd_dev->finddir = &initrd_finddir;
- initrd_dev->ptr = 0;
- initrd_dev->impl = 0;
-
- root_nodes = (fs_node_t *) kmalloc(sizeof(fs_node_t) * initrd_header->nfiles);
- nroot_nodes = initrd_header->nfiles;
-
- for (uint32_t i = 0; i < initrd_header->nfiles; i++) {
- file_headers[i].offset += location;
-
- strcpy(root_nodes[i].name, (const char *) &file_headers[i].name);
- root_nodes[i].mask = root_nodes[i].uid = root_nodes[i].gid = 0;
- root_nodes[i].length = file_headers[i].length;
- root_nodes[i].inode = i;
- root_nodes[i].flags = FS_FILE;
- root_nodes[i].read = &initrd_read;
- root_nodes[i].write = 0;
- root_nodes[i].readdir = 0;
- root_nodes[i].finddir = 0;
- root_nodes[i].open = 0;
- root_nodes[i].close = 0;
- root_nodes[i].impl = 0;
- }
- return initrd_root;
-}
-
-void initrd_test() {
- int i = 0;
- struct dirent *node = 0;
- vesa_draw_string("\n");
- while ((node = readdir_fs(fs_root, i)) != 0) {
- vesa_draw_string("Found file: ");
- vesa_draw_string(node->name);
- vesa_draw_string("\n");
- fs_node_t *fsnode = finddir_fs(fs_root, node->name);
-
- if ((fsnode->flags & 0x7) == FS_DIRECTORY)
- vesa_draw_string("\t (directory)\n");
- else {
- vesa_draw_string("\t contents: \"");
- uint8_t buf[fsnode->length];
- uint32_t sz = read_fs(fsnode, 0, fsnode->length, buf);
- for (uint32_t j = 0; j < sz; j++)
- vesa_draw_char(buf[j]);
-
- vesa_draw_string("\"\n");
- }
- i++;
- }
-} \ No newline at end of file