diff --git a/kernel/include/fs/devices/NullDevice.h b/kernel/include/fs/devices/NullDevice.h new file mode 100644 index 00000000..5c264fcd --- /dev/null +++ b/kernel/include/fs/devices/NullDevice.h @@ -0,0 +1,10 @@ +#pragma once +#include "fs/VFS.h" + +namespace NullDevice +{ + VFS::Node* create_new(const char* devname); + + ssize_t write(VFS::Node* node, size_t offset, size_t size, const char* buffer); + ssize_t read(VFS::Node* node, size_t offset, size_t size, char* buffer); +} \ No newline at end of file diff --git a/kernel/src/fs/devices/DeviceFS.cpp b/kernel/src/fs/devices/DeviceFS.cpp index b507c4a6..a87d9149 100644 --- a/kernel/src/fs/devices/DeviceFS.cpp +++ b/kernel/src/fs/devices/DeviceFS.cpp @@ -1,6 +1,7 @@ #include "fs/devices/DeviceFS.h" #include "fs/devices/Console.h" #include "fs/devices/Keyboard.h" +#include "fs/devices/NullDevice.h" #include "fs/devices/Random.h" #include "fs/devices/Serial.h" #include "fs/devices/Uptime.h" @@ -32,6 +33,7 @@ VFS::Node* DeviceFS::get() devfs_files[devfs_file_count++] = RandomDevice::create_new("random"); devfs_files[devfs_file_count++] = KeyboardDevice::create_new("kbd"); devfs_files[devfs_file_count++] = UptimeDevice::create_new("uptime"); + devfs_files[devfs_file_count++] = NullDevice::create_new("null"); devfs_root->length = devfs_file_count; return devfs_root; } diff --git a/kernel/src/fs/devices/NullDevice.cpp b/kernel/src/fs/devices/NullDevice.cpp new file mode 100644 index 00000000..962ee464 --- /dev/null +++ b/kernel/src/fs/devices/NullDevice.cpp @@ -0,0 +1,29 @@ +#include "fs/devices/NullDevice.h" +#include "std/stdio.h" +#include "std/stdlib.h" +#include "std/string.h" + +VFS::Node* NullDevice::create_new(const char* devname) +{ + VFS::Node* dev = new VFS::Node; + dev->write_func = NullDevice::write; + dev->read_func = NullDevice::read; + dev->inode = 0; + dev->length = 0; + dev->type = VFS_DEVICE; + dev->flags = 0; + strncpy(dev->name, devname, sizeof(dev->name)); + return dev; +} + +ssize_t NullDevice::write(VFS::Node* node, size_t, size_t size, const char*) +{ + if (!node) return -1; + return (ssize_t)size; +} + +ssize_t NullDevice::read(VFS::Node* node, size_t, size_t, char*) +{ + if (!node) return -1; + return 0; +} \ No newline at end of file