Add a simple /dev/full.

This commit is contained in:
Andreas Kling 2018-10-14 13:16:09 +02:00
parent fc1facf5c0
commit 9f9b4a2382
Notes: sideshowbarker 2024-07-19 18:48:20 +09:00
6 changed files with 85 additions and 0 deletions

View file

@ -0,0 +1,30 @@
#include "FullDevice.h"
#include "Limits.h"
#include "sys-errno.h"
#include <AK/StdLib.h>
#include <cstring>
#include <cstdio>
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;
}

View file

@ -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;
};

View file

@ -21,6 +21,7 @@ VFS_OBJS = \
CharacterDevice.o \
ZeroDevice.o \
NullDevice.o \
FullDevice.o \
test.o
OBJS = $(AK_OBJS) $(VFS_OBJS)

Binary file not shown.

View file

@ -0,0 +1,37 @@
#pragma once
#define EPERM 1 // Operation not permitted
#define ENOENT 2 // No such file or directory
#define ESRCH 3 // No such process
#define EINTR 4 // Interrupted system call
#define EIO 5 // I/O error
#define ENXIO 6 // No such device or address
#define E2BIG 7 // Argument list too long
#define ENOEXEC 8 // Exec format error
#define EBADF 9 // Bad file number
#define ECHILD 10 // No child processes
#define EAGAIN 11 // Try again
#define ENOMEM 12 // Out of memory
#define EACCES 13 // Permission denied
#define EFAULT 14 // Bad address
#define ENOTBLK 15 // Block device required
#define EBUSY 16 // Device or resource busy
#define EEXIST 17 // File exists
#define EXDEV 18 // Cross-device link
#define ENODEV 19 // No such device
#define ENOTDIR 20 // Not a directory
#define EISDIR 21 // Is a directory
#define EINVAL 22 // Invalid argument
#define ENFILE 23 // File table overflow
#define EMFILE 24 // Too many open files
#define ENOTTY 25 // Not a typewriter
#define ETXTBSY 26 // Text file busy
#define EFBIG 27 // File too large
#define ENOSPC 28 // No space left on device
#define ESPIPE 29 // Illegal seek
#define EROFS 30 // Read-only file system
#define EMLINK 31 // Too many links
#define EPIPE 32 // Broken pipe
#define EDOM 33 // Math argument out of domain of func
#define ERANGE 34 // Math result not representable

View file

@ -5,6 +5,7 @@
#include "SyntheticFileSystem.h"
#include "ZeroDevice.h"
#include "NullDevice.h"
#include "FullDevice.h"
#include <cstring>
#include <AK/SimpleMalloc.h>
#include <AK/kmalloc.h>
@ -25,6 +26,9 @@ int main(int c, char** v)
auto null = make<NullDevice>();
vfs.registerCharacterDevice(1, 3, *null);
auto full = make<FullDevice>();
vfs.registerCharacterDevice(1, 7, *full);
if (!vfs.mountRoot(makeFileSystem(filename))) {
printf("Failed to mount root :(\n");
return 1;