diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index a300480e..d7ccf4fe 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -56,6 +56,7 @@ set(SOURCES src/fs/MBR.cpp src/fs/GPT.cpp src/fs/StorageCache.cpp + src/fs/OpenFileDescription.cpp src/net/UnixSocket.cpp src/fs/tmpfs/FileSystem.cpp src/fs/tmpfs/Inode.cpp diff --git a/kernel/src/fs/OpenFileDescription.cpp b/kernel/src/fs/OpenFileDescription.cpp new file mode 100644 index 00000000..076f0181 --- /dev/null +++ b/kernel/src/fs/OpenFileDescription.cpp @@ -0,0 +1,33 @@ +#include "fs/OpenFileDescription.h" +#include + +OpenFileDescription::OpenFileDescription(SharedPtr ino, int fl) : inode(ino), flags(fl) +{ + inode->add_handle(); +} + +OpenFileDescription::~OpenFileDescription() +{ + inode->remove_handle(); + inode->did_close(); +} + +bool FileDescriptor::should_append() +{ + return description->flags & O_APPEND; +} + +bool FileDescriptor::should_block() +{ + return !(description->flags & O_NONBLOCK); +} + +bool FileDescriptor::is_readable() +{ + return description->flags & O_RDONLY; +} + +bool FileDescriptor::is_writable() +{ + return description->flags & O_WRONLY; +} diff --git a/kernel/src/fs/OpenFileDescription.h b/kernel/src/fs/OpenFileDescription.h new file mode 100644 index 00000000..af3723fb --- /dev/null +++ b/kernel/src/fs/OpenFileDescription.h @@ -0,0 +1,36 @@ +#pragma once +#include "fs/VFS.h" +#include +#include + +struct OpenFileDescription : public Shareable +{ + SharedPtr inode; + int flags { 0 }; + String path; + + OpenFileDescription(SharedPtr, int); + ~OpenFileDescription(); +}; + +struct FileDescriptor +{ + SharedPtr description; + usize offset { 0 }; + int flags { 0 }; + + bool should_append(); + bool should_block(); + bool is_writable(); + bool is_readable(); + + SharedPtr inode() + { + return description->inode; + } + + int& status_flags() + { + return description->flags; + } +}; diff --git a/kernel/src/thread/Thread.cpp b/kernel/src/thread/Thread.cpp index d9a6eade..6d092515 100644 --- a/kernel/src/thread/Thread.cpp +++ b/kernel/src/thread/Thread.cpp @@ -236,34 +236,3 @@ void Thread::send_signal(int signo) wake_up(); } } - -OpenFileDescription::OpenFileDescription(SharedPtr ino, int fl) : inode(ino), flags(fl) -{ - inode->add_handle(); -} - -OpenFileDescription::~OpenFileDescription() -{ - inode->remove_handle(); - inode->did_close(); -} - -bool FileDescriptor::should_append() -{ - return description->flags & O_APPEND; -} - -bool FileDescriptor::should_block() -{ - return !(description->flags & O_NONBLOCK); -} - -bool FileDescriptor::is_readable() -{ - return description->flags & O_RDONLY; -} - -bool FileDescriptor::is_writable() -{ - return description->flags & O_WRONLY; -} diff --git a/kernel/src/thread/Thread.h b/kernel/src/thread/Thread.h index 584700d2..8a9829fe 100644 --- a/kernel/src/thread/Thread.h +++ b/kernel/src/thread/Thread.h @@ -1,6 +1,7 @@ #pragma once #include "arch/MMU.h" +#include "fs/OpenFileDescription.h" #include "fs/VFS.h" #include "memory/AddressSpace.h" #include @@ -29,37 +30,6 @@ enum class ThreadState Dying }; -struct OpenFileDescription : public Shareable -{ - SharedPtr inode; - int flags { 0 }; - - OpenFileDescription(SharedPtr, int); - ~OpenFileDescription(); -}; - -struct FileDescriptor -{ - SharedPtr description; - usize offset { 0 }; - int flags { 0 }; - - bool should_append(); - bool should_block(); - bool is_writable(); - bool is_readable(); - - SharedPtr inode() - { - return description->inode; - } - - int& status_flags() - { - return description->flags; - } -}; - static constexpr int FD_MAX = 64; struct Credentials