38 lines
917 B
C++
38 lines
917 B
C++
|
#include "fs/devices/Random.h"
|
||
|
#include "config.h"
|
||
|
#include "rand/Mersenne.h"
|
||
|
#include "render/TextRenderer.h"
|
||
|
#include "std/stdio.h"
|
||
|
#include "std/stdlib.h"
|
||
|
#include "std/string.h"
|
||
|
|
||
|
VFS::Node* RandomDevice::create_new(const char* devname)
|
||
|
{
|
||
|
VFS::Node* dev = new VFS::Node;
|
||
|
dev->read_func = RandomDevice::read;
|
||
|
dev->inode = 0;
|
||
|
dev->length = 0;
|
||
|
dev->type = VFS_DEVICE;
|
||
|
dev->flags = 0;
|
||
|
strncpy(dev->name, devname, sizeof(dev->name));
|
||
|
return dev;
|
||
|
}
|
||
|
|
||
|
ssize_t RandomDevice::read(VFS::Node* node, size_t, size_t size, char* buffer)
|
||
|
{
|
||
|
if (!node) return -1;
|
||
|
size_t nread = size;
|
||
|
while (size >= sizeof(uint64_t))
|
||
|
{
|
||
|
*(uint64_t*)buffer = Mersenne::get();
|
||
|
size -= sizeof(uint64_t);
|
||
|
buffer += sizeof(uint64_t);
|
||
|
}
|
||
|
while (size)
|
||
|
{
|
||
|
*buffer = (char)(Mersenne::get() & 0xFF);
|
||
|
size--;
|
||
|
buffer++;
|
||
|
}
|
||
|
return (ssize_t)nread;
|
||
|
}
|