aboutsummaryrefslogtreecommitdiffstats
path: root/src/fs
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs')
-rw-r--r--src/fs/initrd.c10
-rw-r--r--src/fs/stdio.c55
-rw-r--r--src/fs/stdio.h8
3 files changed, 72 insertions, 1 deletions
diff --git a/src/fs/initrd.c b/src/fs/initrd.c
index efa430c..5731ab5 100644
--- a/src/fs/initrd.c
+++ b/src/fs/initrd.c
@@ -18,12 +18,13 @@ static const uint32_t initrd_size = (uint32_t)_binary_initrd_img_size;
void *initrd_open(const char *file);
uint32_t initrd_read(void *info, uint32_t count, uint8_t *buffer);
+int initrd_close(void *info);
char *initrd_getfile(uint32_t offset);
static const vfs_volume_funcs initrd_funcs = {
initrd_open,
- 0, // close
+ initrd_close,
initrd_read,
0, // write
0 // readdir
@@ -52,6 +53,13 @@ void *initrd_open(const char *file)
return 0;
}
+int initrd_close(void *info)
+{
+ // Nothing to do
+ free(info);
+ return 0;
+}
+
uint32_t initrd_read(void *info, uint32_t count, uint8_t *buffer)
{
initrd_info *iinfo = (initrd_info *)info;
diff --git a/src/fs/stdio.c b/src/fs/stdio.c
new file mode 100644
index 0000000..6cea2a3
--- /dev/null
+++ b/src/fs/stdio.c
@@ -0,0 +1,55 @@
+#include "stdio.h"
+
+#include <kernel/heap.h>
+#include <kernel/serial.h>
+
+void *stdio_open(const char *path);
+int stdio_close(void *info);
+uint32_t stdio_read(void *info, uint32_t count, uint8_t *buffer);
+uint32_t stdio_write(void *info, uint32_t count, const uint8_t *buffer);
+
+const vfs_volume_funcs stdio_funcs = {
+ stdio_open,
+ stdio_close,
+ stdio_read,
+ stdio_write,
+ 0, // readdir
+};
+
+void *stdio_open(const char *path)
+{
+ int *id = malloc(sizeof(uint32_t));
+
+ if (path[0] == 'o' && path[1] == 'u' && path[2] == 't')
+ *id = 1;
+ else if (path[0] == 'i' && path[1] == 'n')
+ *id = 0;
+ if (path[0] == 'e' && path[1] == 'r' && path[2] == 'r')
+ *id = 2;
+
+ return id;
+}
+
+int stdio_close(void *info)
+{
+ // Nothing to do
+ free(info);
+ return 0;
+}
+
+uint32_t stdio_read(void *info, uint32_t count, uint8_t *buffer)
+{
+ (void)info;
+ (void)count;
+ (void)buffer;
+ return 0;
+}
+
+uint32_t stdio_write(void *info, uint32_t count, const uint8_t *buffer)
+{
+ (void)info;
+ for (uint32_t i = 0; i < count; i++)
+ serial_put(buffer[count]);
+ return count;
+}
+
diff --git a/src/fs/stdio.h b/src/fs/stdio.h
new file mode 100644
index 0000000..90d0f68
--- /dev/null
+++ b/src/fs/stdio.h
@@ -0,0 +1,8 @@
+#ifndef INTIRD_H_
+#define INITRD_H_
+
+#include <kernel/vfs.h>
+
+extern const vfs_volume_funcs stdio_funcs;
+
+#endif // INITRD_H_