aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/include/kernel/devices/block_device.hpp5
-rw-r--r--kernel/include/kernel/devices/device.hpp9
-rw-r--r--kernel/src/devices/block_device.cpp5
-rw-r--r--kernel/src/devices/device.cpp7
-rw-r--r--kernel/src/devices/storage/ram_disk/ram_disk_device.cpp15
-rw-r--r--kernel/src/filesystem/vfs.cpp2
-rw-r--r--kernel/src/main.cpp13
7 files changed, 31 insertions, 25 deletions
diff --git a/kernel/include/kernel/devices/block_device.hpp b/kernel/include/kernel/devices/block_device.hpp
index fb7d104..e2026dd 100644
--- a/kernel/include/kernel/devices/block_device.hpp
+++ b/kernel/include/kernel/devices/block_device.hpp
@@ -3,8 +3,9 @@
#include "kernel/devices/device.hpp"
+#include <kstd/string>
+
#include <cstddef>
-#include <string_view>
namespace devices
{
@@ -20,7 +21,7 @@ namespace devices
* @param name Device name.
* @param block_size Size of one logical block in bytes.
*/
- block_device(size_t major, size_t minor, std::string_view name, size_t block_size);
+ block_device(size_t major, size_t minor, kstd::string const & name, size_t block_size);
/**
* @brief Read data from the block at @p block_index into @p buffer.
diff --git a/kernel/include/kernel/devices/device.hpp b/kernel/include/kernel/devices/device.hpp
index d6f520f..66cb7f8 100644
--- a/kernel/include/kernel/devices/device.hpp
+++ b/kernel/include/kernel/devices/device.hpp
@@ -1,8 +1,9 @@
#ifndef TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
#define TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
+#include <kstd/string>
+
#include <cstddef>
-#include <string_view>
namespace devices
{
@@ -17,7 +18,7 @@ namespace devices
* @param minor Device minor number.
* @param name Device name.
*/
- device(size_t major, size_t minor, std::string_view name);
+ device(size_t major, size_t minor, kstd::string const & name);
/**
* @brief Virtual destructor for device.
@@ -40,7 +41,7 @@ namespace devices
* @brief Returns the name of the device.
* @return Device name.
*/
- [[nodiscard]] auto name() const -> std::string_view;
+ [[nodiscard]] auto name() const -> kstd::string const &;
/**
* @brief Check if the device is a block device.
@@ -54,7 +55,7 @@ namespace devices
private:
size_t m_major;
size_t m_minor;
- std::string_view m_name;
+ kstd::string m_name;
};
} // namespace devices
diff --git a/kernel/src/devices/block_device.cpp b/kernel/src/devices/block_device.cpp
index d12251b..3402814 100644
--- a/kernel/src/devices/block_device.cpp
+++ b/kernel/src/devices/block_device.cpp
@@ -4,12 +4,13 @@
#include "kernel/devices/device.hpp"
+#include <kstd/string>
+
#include <cstddef>
-#include <string_view>
namespace devices
{
- block_device::block_device(size_t major, size_t minor, std::string_view name, size_t block_size)
+ block_device::block_device(size_t major, size_t minor, kstd::string const & name, size_t block_size)
: device(major, minor, name)
, m_block_size(block_size)
{
diff --git a/kernel/src/devices/device.cpp b/kernel/src/devices/device.cpp
index 29498fa..287f14b 100644
--- a/kernel/src/devices/device.cpp
+++ b/kernel/src/devices/device.cpp
@@ -1,11 +1,12 @@
#include "kernel/devices/device.hpp"
+#include <kstd/string>
+
#include <cstddef>
-#include <string_view>
namespace devices
{
- device::device(size_t major, size_t minor, std::string_view name)
+ device::device(size_t major, size_t minor, kstd::string const & name)
: m_major(major)
, m_minor(minor)
, m_name(name)
@@ -21,7 +22,7 @@ namespace devices
return m_minor;
}
- auto device::name() const -> std::string_view
+ auto device::name() const -> kstd::string const &
{
return m_name;
}
diff --git a/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp b/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp
index 650a151..bf329cb 100644
--- a/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp
+++ b/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp
@@ -6,30 +6,19 @@
#include "kernel/devices/block_device.hpp"
#include <kstd/cstring>
+#include <kstd/string>
-#include <array>
#include <cstddef>
-#include <string_view>
namespace devices::storage::ram_disk
{
namespace
{
constexpr size_t RAM_DISK_BLOCK_SIZE = 512uz;
-
- // TODO BA-FS26 @Felix
- // TODO BA-FS26 currently only names for 9 minor devices
- constinit std::array<char, 5> name = {'r', 'a', 'm', '0', '\0'};
-
- auto determine_device_name(size_t minor) -> std::string_view
- {
- name[3] = '0' + minor;
- return std::string_view{name};
- }
} // namespace
ram_disk_device::ram_disk_device(kapi::boot_modules::boot_module const & module, size_t major, size_t minor)
- : block_device(major, minor, determine_device_name(minor), RAM_DISK_BLOCK_SIZE)
+ : block_device(major, minor, "ram" + kstd::to_string(minor), RAM_DISK_BLOCK_SIZE)
, m_boot_module(module)
{}
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index c448618..1bd6fb5 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -120,7 +120,7 @@ namespace filesystem
kapi::system::panic("[FILESYSTEM] make_device_node called with null device.");
}
- m_device_nodes.push_back(device_node_entry{device->name(), kstd::make_shared<device_inode>(device)});
+ m_device_nodes.push_back(device_node_entry{device->name().view(), kstd::make_shared<device_inode>(device)});
}
auto vfs::resolve_path(std::string_view path) -> std::optional<custody>
diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp
index eb699bd..1043c81 100644
--- a/kernel/src/main.cpp
+++ b/kernel/src/main.cpp
@@ -10,14 +10,26 @@
#include "kernel/filesystem/vfs.hpp"
#include "kernel/memory.hpp"
+#include <kstd/format>
#include <kstd/memory>
#include <kstd/os/error.hpp>
#include <kstd/print>
+#include <kstd/string>
#include <kstd/vector>
+#include <algorithm>
#include <cstddef>
#include <cstdint>
+auto test_device_names() -> void
+{
+ auto storage_mgmt = devices::storage::storage_management::get();
+ std::ranges::for_each(storage_mgmt.all_controllers(), [](auto const & controller) {
+ std::ranges::for_each(controller->all_devices(),
+ [](auto const & device) { kstd::println("{}", device->name().view()); });
+ });
+}
+
auto test_file_description_manually() -> void
{
// setup
@@ -96,6 +108,7 @@ auto test_device_with_vfs() -> void
auto run_test_code() -> void
{
+ test_device_names();
test_file_description_manually();
test_device_with_vfs();
}