diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 3ad51d52..2e2e40d2 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -47,6 +47,7 @@ set(SOURCES src/fs/devices/DeviceRegistry.cpp src/fs/devices/NullDevice.cpp src/fs/devices/ZeroDevice.cpp + src/fs/devices/FullDevice.cpp src/fs/devices/ConsoleDevice.cpp src/fs/devices/FramebufferDevice.cpp src/fs/InitRD.cpp diff --git a/kernel/src/fs/devices/DeviceRegistry.cpp b/kernel/src/fs/devices/DeviceRegistry.cpp index 59ce97bf..1c7a9705 100644 --- a/kernel/src/fs/devices/DeviceRegistry.cpp +++ b/kernel/src/fs/devices/DeviceRegistry.cpp @@ -3,6 +3,7 @@ #include "fs/VFS.h" #include "fs/devices/ConsoleDevice.h" #include "fs/devices/FramebufferDevice.h" +#include "fs/devices/FullDevice.h" #include "fs/devices/NullDevice.h" #include "fs/devices/ZeroDevice.h" #include "fs/tmpfs/FileSystem.h" @@ -69,6 +70,7 @@ namespace DeviceRegistry NullDevice::create(); ZeroDevice::create(); + FullDevice::create(); ConsoleDevice::create(); FramebufferDevice::create(); diff --git a/kernel/src/fs/devices/FullDevice.cpp b/kernel/src/fs/devices/FullDevice.cpp new file mode 100644 index 00000000..d3df949a --- /dev/null +++ b/kernel/src/fs/devices/FullDevice.cpp @@ -0,0 +1,7 @@ +#include "fs/devices/FullDevice.h" + +Result FullDevice::create() +{ + auto device = (SharedPtr)TRY(make_shared()); + return DeviceRegistry::register_special_device(DeviceRegistry::Memory, 2, device, "full"); +} diff --git a/kernel/src/fs/devices/FullDevice.h b/kernel/src/fs/devices/FullDevice.h new file mode 100644 index 00000000..85830003 --- /dev/null +++ b/kernel/src/fs/devices/FullDevice.h @@ -0,0 +1,28 @@ +#pragma once +#include "fs/devices/DeviceRegistry.h" + +class FullDevice : public Device +{ + public: + // Initializer for DeviceRegistry. + static Result create(); + + Result read(u8* buf, usize, usize length) const override + { + __builtin_memset(buf, 0, length); + + return length; + } + + Result write(const u8*, usize, usize) override + { + return err(ENOSPC); + } + + bool blocking() const override + { + return false; + } + + virtual ~FullDevice() = default; +};