mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:28:12 +00:00
Add a simple /dev/full.
This commit is contained in:
parent
fc1facf5c0
commit
9f9b4a2382
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 \
|
CharacterDevice.o \
|
||||||
ZeroDevice.o \
|
ZeroDevice.o \
|
||||||
NullDevice.o \
|
NullDevice.o \
|
||||||
|
FullDevice.o \
|
||||||
test.o
|
test.o
|
||||||
|
|
||||||
OBJS = $(AK_OBJS) $(VFS_OBJS)
|
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 "SyntheticFileSystem.h"
|
||||||
#include "ZeroDevice.h"
|
#include "ZeroDevice.h"
|
||||||
#include "NullDevice.h"
|
#include "NullDevice.h"
|
||||||
|
#include "FullDevice.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <AK/SimpleMalloc.h>
|
#include <AK/SimpleMalloc.h>
|
||||||
#include <AK/kmalloc.h>
|
#include <AK/kmalloc.h>
|
||||||
|
@ -25,6 +26,9 @@ int main(int c, char** v)
|
||||||
auto null = make<NullDevice>();
|
auto null = make<NullDevice>();
|
||||||
vfs.registerCharacterDevice(1, 3, *null);
|
vfs.registerCharacterDevice(1, 3, *null);
|
||||||
|
|
||||||
|
auto full = make<FullDevice>();
|
||||||
|
vfs.registerCharacterDevice(1, 7, *full);
|
||||||
|
|
||||||
if (!vfs.mountRoot(makeFileSystem(filename))) {
|
if (!vfs.mountRoot(makeFileSystem(filename))) {
|
||||||
printf("Failed to mount root :(\n");
|
printf("Failed to mount root :(\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue