diff options
Diffstat (limited to 'src/fs')
-rw-r--r-- | src/fs/initrd.c | 10 | ||||
-rw-r--r-- | src/fs/stdio.c | 55 | ||||
-rw-r--r-- | src/fs/stdio.h | 8 |
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_ |