Thread secured initfs.

This commit is contained in:
Jonas 'Sortie' Termansen 2012-08-01 18:40:40 +02:00
parent f00c8b3d63
commit 459a1b2b3f
1 changed files with 6 additions and 0 deletions

View File

@ -23,6 +23,7 @@
******************************************************************************/
#include <sortix/kernel/platform.h>
#include <sortix/kernel/kthread.h>
#include <libmaxsi/error.h>
#include <libmaxsi/string.h>
#include <libmaxsi/memory.h>
@ -53,6 +54,7 @@ namespace Sortix
size_t offset;
const byte* buffer;
size_t buffersize;
kthread_mutex_t filelock;
public:
virtual size_t BlockSize();
@ -73,6 +75,7 @@ namespace Sortix
this->buffer = buffer;
this->buffersize = buffersize;
this->offset = 0;
this->filelock = KTHREAD_MUTEX_INITIALIZER;
}
DevInitFSFile::~DevInitFSFile()
@ -92,11 +95,13 @@ namespace Sortix
uintmax_t DevInitFSFile::Position()
{
ScopedLock lock(&filelock);
return offset;
}
bool DevInitFSFile::Seek(uintmax_t position)
{
ScopedLock lock(&filelock);
if ( SIZE_MAX < position ) { Error::Set(EOVERFLOW); return false; }
offset = position;
return true;
@ -110,6 +115,7 @@ namespace Sortix
ssize_t DevInitFSFile::Read(byte* dest, size_t count)
{
ScopedLock lock(&filelock);
if ( SSIZE_MAX < count ) { count = SSIZE_MAX; }
size_t available = count;
if ( buffersize < offset + count ) { available = buffersize - offset; }