aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kapi/filesystem.cpp5
-rw-r--r--kernel/kapi/filesystem.tests.cpp6
-rw-r--r--kernel/kernel/filesystem/open_file_descriptor.cpp53
-rw-r--r--kernel/kernel/filesystem/open_file_descriptor.hpp4
4 files changed, 26 insertions, 42 deletions
diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp
index 419c3234..3708c15d 100644
--- a/kernel/kapi/filesystem.cpp
+++ b/kernel/kapi/filesystem.cpp
@@ -57,11 +57,10 @@ namespace kapi::filesystem
});
}
- auto seek(size_t file_descriptor, kstd::bytes offset, seek_direction direction, seek_origin origin)
- -> kstd::result<kstd::bytes>
+ auto seek(size_t file_descriptor, kstd::offset offset, seek_origin origin) -> kstd::result<kstd::bytes>
{
return kernel::filesystem::open_file_table::get().file(file_descriptor).and_then([=](auto file) {
- return file->seek(offset, direction, origin);
+ return file->seek(offset, origin);
});
}
diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp
index 2f975bf8..2e623272 100644
--- a/kernel/kapi/filesystem.tests.cpp
+++ b/kernel/kapi/filesystem.tests.cpp
@@ -150,14 +150,12 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap
THEN("seeking forward from the beginning succeeds")
{
- REQUIRE(kapi::filesystem::seek(*file, 100_B, kapi::filesystem::seek_direction::forward,
- kapi::filesystem::seek_origin::beginning) == 100_B);
+ REQUIRE(kapi::filesystem::seek(*file, 100_B_off, kapi::filesystem::seek_origin::beginning) == 100_B);
}
THEN("seeking backward from the beginning fails")
{
- REQUIRE_FALSE(kapi::filesystem::seek(*file, 100_B, kapi::filesystem::seek_direction::backward,
- kapi::filesystem::seek_origin::beginning));
+ REQUIRE_FALSE(kapi::filesystem::seek(*file, 100_B_off, kapi::filesystem::seek_origin::beginning));
}
}
diff --git a/kernel/kernel/filesystem/open_file_descriptor.cpp b/kernel/kernel/filesystem/open_file_descriptor.cpp
index a6d97b8e..98520aa8 100644
--- a/kernel/kernel/filesystem/open_file_descriptor.cpp
+++ b/kernel/kernel/filesystem/open_file_descriptor.cpp
@@ -1,7 +1,6 @@
#include <kernel/filesystem/open_file_descriptor.hpp>
#include <kernel/filesystem/dentry.hpp>
-#include <kernel/filesystem/error.hpp>
#include <kapi/filesystem.hpp>
@@ -53,47 +52,37 @@ namespace kernel::filesystem
}
}
- auto open_file_descriptor::seek(kstd::bytes offset, kapi::filesystem::seek_direction direction,
- kapi::filesystem::seek_origin origin) -> kstd::result<kstd::bytes>
+ auto open_file_descriptor::seek(kstd::offset offset, kapi::filesystem::seek_origin origin)
+ -> kstd::result<kstd::bytes>
{
- switch (origin)
- {
- case kapi::filesystem::seek_origin::beginning:
+ auto const base = [&] {
+ switch (origin)
{
- if (direction == kapi::filesystem::seek_direction::backward)
+ case kapi::filesystem::seek_origin::beginning:
{
- return kstd::failure(vfs_errc::invalid_argument);
+ return kstd::bytes{0};
}
- return m_offset = offset;
- }
- case kapi::filesystem::seek_origin::current_position:
- {
- if (direction == kapi::filesystem::seek_direction::backward)
+ case kapi::filesystem::seek_origin::current_position:
{
- if (offset > m_offset)
- {
- return kstd::failure(vfs_errc::invalid_argument);
- }
- return m_offset -= offset;
+ return m_offset;
}
- return m_offset += offset;
- }
- case kapi::filesystem::seek_origin::end:
- {
- auto base = m_dentry->get_inode()->status()->size;
- if (direction == kapi::filesystem::seek_direction::backward)
+ case kapi::filesystem::seek_origin::end:
{
- if (offset > base)
- {
- return kstd::failure(vfs_errc::invalid_argument);
- }
- return m_offset = base - offset;
+ return m_dentry->get_inode()->status()->size;
+ }
+ default:
+ {
+ return kstd::bytes{0};
}
- return m_offset = base + offset;
}
- }
+ }();
- return kstd::failure(vfs_errc::invalid_argument);
+ auto new_offset = base + offset;
+ if (new_offset)
+ {
+ m_offset = *new_offset;
+ }
+ return new_offset;
}
auto open_file_descriptor::offset() const -> kstd::bytes
diff --git a/kernel/kernel/filesystem/open_file_descriptor.hpp b/kernel/kernel/filesystem/open_file_descriptor.hpp
index 25dbf719..a9d043bf 100644
--- a/kernel/kernel/filesystem/open_file_descriptor.hpp
+++ b/kernel/kernel/filesystem/open_file_descriptor.hpp
@@ -52,11 +52,9 @@ namespace kernel::filesystem
//! Move the read/write offset of the file.
//!
//! @param offset The offset to apply relative to the given origin.
- //! @param offset The direction to seek in, relative to the given origin.
//! @param origin The origin of the offset.
//! @return the new offset on success, an error otherwise.
- auto seek(kstd::bytes offset, kapi::filesystem::seek_direction direction, kapi::filesystem::seek_origin origin)
- -> kstd::result<kstd::bytes>;
+ auto seek(kstd::offset offset, kapi::filesystem::seek_origin origin) -> kstd::result<kstd::bytes>;
/**
@brief Returns the current file offset for this open file descriptor.