From 9f9b4a23823a851d632a0b2e757f1232b5de5620 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 14 Oct 2018 13:16:09 +0200 Subject: [PATCH] Add a simple /dev/full. --- VirtualFileSystem/FullDevice.cpp | 30 +++++++++++++++++++++++++ VirtualFileSystem/FullDevice.h | 13 +++++++++++ VirtualFileSystem/Makefile | 1 + VirtualFileSystem/small.fs | Bin 2048000 -> 2048000 bytes VirtualFileSystem/sys-errno.h | 37 +++++++++++++++++++++++++++++++ VirtualFileSystem/test.cpp | 4 ++++ 6 files changed, 85 insertions(+) create mode 100644 VirtualFileSystem/FullDevice.cpp create mode 100644 VirtualFileSystem/FullDevice.h create mode 100644 VirtualFileSystem/sys-errno.h diff --git a/VirtualFileSystem/FullDevice.cpp b/VirtualFileSystem/FullDevice.cpp new file mode 100644 index 0000000000..2ef60e6299 --- /dev/null +++ b/VirtualFileSystem/FullDevice.cpp @@ -0,0 +1,30 @@ +#include "FullDevice.h" +#include "Limits.h" +#include "sys-errno.h" +#include +#include +#include + +FullDevice::FullDevice() +{ +} + +FullDevice::~FullDevice() +{ +} + +ssize_t FullDevice::read(byte* buffer, size_t bufferSize) +{ + printf("read from full device\n"); + size_t count = min(GoodBufferSize, bufferSize); + memset(buffer, 0, count); + return count; +} + +ssize_t FullDevice::write(const byte*, size_t bufferSize) +{ + if (bufferSize == 0) + return 0; + return -ENOSPC; +} + diff --git a/VirtualFileSystem/FullDevice.h b/VirtualFileSystem/FullDevice.h new file mode 100644 index 0000000000..ca1743270a --- /dev/null +++ b/VirtualFileSystem/FullDevice.h @@ -0,0 +1,13 @@ +#pragma once + +#include "CharacterDevice.h" + +class FullDevice final : public CharacterDevice { +public: + FullDevice(); + virtual ~FullDevice(); + + ssize_t read(byte* buffer, size_t bufferSize) override; + ssize_t write(const byte* buffer, size_t bufferSize) override; +}; + diff --git a/VirtualFileSystem/Makefile b/VirtualFileSystem/Makefile index 035039a658..7b3df94bb4 100644 --- a/VirtualFileSystem/Makefile +++ b/VirtualFileSystem/Makefile @@ -21,6 +21,7 @@ VFS_OBJS = \ CharacterDevice.o \ ZeroDevice.o \ NullDevice.o \ + FullDevice.o \ test.o OBJS = $(AK_OBJS) $(VFS_OBJS) diff --git a/VirtualFileSystem/small.fs b/VirtualFileSystem/small.fs index 2970765b7362bfc2b945e5546d2ba4f57c11cc3f..0eb8186ea16e243f596bf391fa166eaa34319f0e 100644 GIT binary patch delta 236 zcmZo@sBLJd-5|ii_-L{qi#)4@%He3H&893jnHe8#=I8jL%xFK6QD(D(PNIOOA_Eu* zs~nDoVXy!LBZPvI?2Ho`tysGKWiC!+l$hLLz`-qo(6L$AR`jw64+9HxRccYb6axdp z1!flJw9=fMjf_W_+e8@KM3~w{nA=2H+C*5}MA+Iy*xN)n+C(_pM7Y{SxZ6Z{+C+HU zMEKf7_}fGT+C&7~M1}?_(Z6cg)B3x}E+-)K}Z6dsFB7AKk{B0rvZ6bngB0_B #include #include @@ -25,6 +26,9 @@ int main(int c, char** v) auto null = make(); vfs.registerCharacterDevice(1, 3, *null); + auto full = make(); + vfs.registerCharacterDevice(1, 7, *full); + if (!vfs.mountRoot(makeFileSystem(filename))) { printf("Failed to mount root :(\n"); return 1;