diff --git a/src/core/file_sys/fs.cpp b/src/core/file_sys/fs.cpp index 173649bd..29c35179 100644 --- a/src/core/file_sys/fs.cpp +++ b/src/core/file_sys/fs.cpp @@ -33,8 +33,34 @@ std::string MntPoints::getHostDirectory(const std::string& guest_directory) { } return ""; } -int HandleTable::createHandle() { return 0; } -void HandleTable::deleteHandle(int d) {} -File* HandleTable::getFile(int d) { return nullptr; } -File* HandleTable::getFile(const std::string& real_name) { return nullptr; } +int HandleTable::createHandle() { + std::unique_lock lock{m_mutex}; + auto* file = new File{}; + file->isDirectory = false; + file->isOpened = false; + + int existingFilesNum = m_files.size(); + // TODO when i close a file m_files probably have a open pos , so we can fill this + m_files.push_back(file); + + return existingFilesNum - 1; +} +void HandleTable::deleteHandle(int d) { + std::unique_lock lock{m_mutex}; + delete m_files.at(d); + m_files[d] = nullptr; +} +File* HandleTable::getFile(int d) { + std::unique_lock lock{m_mutex}; + return m_files.at(d); +} +File* HandleTable::getFile(const std::string& real_name) { + std::unique_lock lock{m_mutex}; + for (auto* file : m_files) { + if (file != nullptr && file->m_real_name == real_name) { + return file; + } + } + return nullptr; +} } // namespace Core::FileSys \ No newline at end of file diff --git a/src/core/file_sys/fs.h b/src/core/file_sys/fs.h index 4073036d..462093ba 100644 --- a/src/core/file_sys/fs.h +++ b/src/core/file_sys/fs.h @@ -24,7 +24,11 @@ class MntPoints { std::mutex m_mutex; }; -struct File {}; +struct File { + std::atomic_bool isOpened; + std::atomic_bool isDirectory; + std::string m_real_name; +}; class HandleTable { HandleTable() {} virtual ~HandleTable() {}