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