Luna/kernel/src/fs/devices/Random.cpp

38 lines
917 B
C++
Raw Normal View History

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