From 459a1b2b3f9484b868f97a69b2ea47b65b10f1f9 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 1 Aug 2012 18:40:40 +0200 Subject: [PATCH] Thread secured initfs. --- sortix/fs/initfs.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sortix/fs/initfs.cpp b/sortix/fs/initfs.cpp index 941788e6..4b0d43b8 100644 --- a/sortix/fs/initfs.cpp +++ b/sortix/fs/initfs.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include +#include #include #include #include @@ -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; }