Add a simple /dev/full.
This commit is contained in:
parent
fc1facf5c0
commit
9f9b4a2382
Notes:
sideshowbarker
2024-07-19 18:48:20 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/9f9b4a23823
6 changed files with 85 additions and 0 deletions
30
VirtualFileSystem/FullDevice.cpp
Normal file
30
VirtualFileSystem/FullDevice.cpp
Normal 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;
|
||||
}
|
||||
|
13
VirtualFileSystem/FullDevice.h
Normal file
13
VirtualFileSystem/FullDevice.h
Normal 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;
|
||||
};
|
||||
|
|
@ -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.
37
VirtualFileSystem/sys-errno.h
Normal file
37
VirtualFileSystem/sys-errno.h
Normal 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
|
||||
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue