aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-09-09 23:02:20 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-09-09 23:02:20 +0200
commitb99b79d8080cc1491f96069677d9ce0b7775a4f0 (patch)
tree1f7a4534926a79ee6376770c63cccd2aa9e37442 /kernel
parent9438d08cc7a7f814d8d1b0cb13f4db176fc53aeb (diff)
downloadkernel-b99b79d8080cc1491f96069677d9ce0b7775a4f0.tar.xz
kernel-b99b79d8080cc1491f96069677d9ce0b7775a4f0.zip
chore: replace some naked pointers
The coding guidelines explicitly prohibit the use of "naked"/C-style pointers. However, there were some prominent examples in the kapi and the core kernel source. This changeset replaces them with the appropriate smart pointer types.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kapi/boot_modules/device.cpp5
-rw-r--r--kernel/kapi/devices/bus.cpp6
-rw-r--r--kernel/kapi/devices/device.cpp10
-rw-r--r--kernel/kapi/devices/driver.cpp3
-rw-r--r--kernel/kapi/devices/driver.tests.cpp29
-rw-r--r--kernel/kapi/devices/driver_registry.tests.cpp12
-rw-r--r--kernel/kapi/devices/facet_registry.cpp6
-rw-r--r--kernel/kapi/devices/facet_registry.tests.cpp10
-rw-r--r--kernel/kernel/devices/pseudo.cpp5
-rw-r--r--kernel/kernel/devices/pseudo.hpp3
-rw-r--r--kernel/kernel/drivers/pseudo/null.cpp6
-rw-r--r--kernel/kernel/drivers/pseudo/null.hpp3
-rw-r--r--kernel/kernel/drivers/pseudo/zero.cpp6
-rw-r--r--kernel/kernel/drivers/pseudo/zero.hpp3
-rw-r--r--kernel/kernel/drivers/storage/ram_disk.cpp10
-rw-r--r--kernel/kernel/drivers/storage/ram_disk.hpp3
-rw-r--r--kernel/kernel/test_support/devices/block_device.cpp5
-rw-r--r--kernel/kernel/test_support/devices/block_device.hpp3
-rw-r--r--kernel/kernel/vfs/device_inode.cpp4
19 files changed, 71 insertions, 61 deletions
diff --git a/kernel/kapi/boot_modules/device.cpp b/kernel/kapi/boot_modules/device.cpp
index dac24906..4bfce5f1 100644
--- a/kernel/kapi/boot_modules/device.cpp
+++ b/kernel/kapi/boot_modules/device.cpp
@@ -5,6 +5,7 @@
#include <kapi/devices.hpp>
#include <kstd/format.hpp>
+#include <kstd/memory.hpp>
#include <cstddef>
#include <string_view>
@@ -27,11 +28,11 @@ namespace kapi::boot_modules
return m_module;
}
- auto device::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto device::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == boot_module_signature::id)
{
- return static_cast<boot_module_signature *>(this);
+ return kstd::make_observer<boot_module_signature>(this);
}
return kapi::devices::device::query_facet(facet);
diff --git a/kernel/kapi/devices/bus.cpp b/kernel/kapi/devices/bus.cpp
index 300151d5..d956c3b8 100644
--- a/kernel/kapi/devices/bus.cpp
+++ b/kernel/kapi/devices/bus.cpp
@@ -84,15 +84,15 @@ namespace kapi::devices
return m_devices;
}
- auto bus::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto bus::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == bus::id)
{
- return this;
+ return kstd::observer_ptr(this);
}
else if (facet == bus_protocol::id)
{
- return m_protocol;
+ return kstd::observer_ptr{m_protocol};
}
return device::query_facet(facet);
diff --git a/kernel/kapi/devices/device.cpp b/kernel/kapi/devices/device.cpp
index 2576e20a..3a3b7cc1 100644
--- a/kernel/kapi/devices/device.cpp
+++ b/kernel/kapi/devices/device.cpp
@@ -23,12 +23,12 @@ namespace kapi::devices
: m_name(name)
{}
- auto device::facet(kapi::capabilities::facet_id facet) noexcept -> void *
+ auto device::facet(kapi::capabilities::facet_id facet) noexcept -> kstd::observer_ptr<void>
{
return query_facet(facet);
}
- auto device::facet(kapi::capabilities::facet_id facet) const noexcept -> void const *
+ auto device::facet(kapi::capabilities::facet_id facet) const noexcept -> kstd::observer_ptr<void const>
{
return const_cast<device *>(this)->query_facet(facet);
}
@@ -61,10 +61,10 @@ namespace kapi::devices
m_state = state;
}
- auto device::bound_driver() const noexcept -> driver *
+ auto device::bound_driver() const noexcept -> kstd::shared_ptr<driver>
{
auto guard = kstd::lock_guard{m_lock};
- return m_driver.lock().get();
+ return m_driver.lock();
}
auto device::bind_driver(kstd::weak_ptr<struct driver> driver) -> void
@@ -114,7 +114,7 @@ namespace kapi::devices
m_resources = std::move(resources);
}
- auto device::query_facet(kapi::capabilities::facet_id) -> void *
+ auto device::query_facet(kapi::capabilities::facet_id) -> kstd::observer_ptr<void>
{
return nullptr;
}
diff --git a/kernel/kapi/devices/driver.cpp b/kernel/kapi/devices/driver.cpp
index 5ca92dc8..0f103cbc 100644
--- a/kernel/kapi/devices/driver.cpp
+++ b/kernel/kapi/devices/driver.cpp
@@ -1,6 +1,7 @@
#include <kapi/capabilities/facet_id.hpp>
#include <kapi/devices.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <cstdint>
@@ -29,7 +30,7 @@ namespace kapi::devices
return kstd::success();
}
- auto driver::query_facet(kapi::capabilities::facet_id) -> void *
+ auto driver::query_facet(kapi::capabilities::facet_id) -> kstd::observer_ptr<void>
{
return nullptr;
}
diff --git a/kernel/kapi/devices/driver.tests.cpp b/kernel/kapi/devices/driver.tests.cpp
index ee3fe577..38d07ed9 100644
--- a/kernel/kapi/devices/driver.tests.cpp
+++ b/kernel/kapi/devices/driver.tests.cpp
@@ -36,8 +36,8 @@ namespace
[[nodiscard]] auto match(kapi::devices::device const & dev, kapi::devices::driver const & drv) const
-> kstd::result<std::uint32_t> override
{
- auto const * signature = dev.facet<controller_signature>();
- auto const * claim = drv.facet<controller_claim>();
+ auto const signature = dev.facet<controller_signature>();
+ auto const claim = drv.facet<controller_claim>();
if (!signature || !claim || !std::ranges::contains(claim->supported_names(), signature->controller_name()))
{
return kstd::failure(kapi::devices::driver_match_errc::no_match);
@@ -65,11 +65,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == controller_signature::id)
{
- return static_cast<controller_signature *>(this);
+ return kstd::make_observer<controller_signature>(this);
}
return kapi::devices::bus::query_facet(facet);
}
@@ -101,11 +101,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == leaf_signature::id)
{
- return static_cast<leaf_signature *>(this);
+ return kstd::make_observer<leaf_signature>(this);
}
return kapi::devices::device::query_facet(facet);
}
@@ -123,9 +123,9 @@ namespace
[[nodiscard]] auto match(kapi::devices::device const & dev, kapi::devices::driver const & drv) const
-> kstd::result<std::uint32_t> override
{
- auto const * ident = dev.facet<leaf_signature>();
- auto const * claims = drv.facet<leaf_claim>();
- if (!ident || !claims || !std::ranges::contains(claims->supported_names(), ident->leaf_name()))
+ auto const signature = dev.facet<leaf_signature>();
+ auto const claims = drv.facet<leaf_claim>();
+ if (!signature || !claims || !std::ranges::contains(claims->supported_names(), signature->leaf_name()))
{
return kstd::failure(kapi::devices::driver_match_errc::no_match);
}
@@ -166,11 +166,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == controller_claim::id)
{
- return static_cast<controller_claim *>(this);
+ return kstd::make_observer<controller_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
@@ -198,11 +198,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == leaf_claim::id)
{
- return static_cast<leaf_claim *>(this);
+ return kstd::make_observer<leaf_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
@@ -213,7 +213,8 @@ namespace
SCENARIO("a bound controller driver can attach a further, independently-typed bus protocol of its own",
"[devices][driver][stacking]")
{
- GIVEN("a controller bus, a controller driver, and a leaf driver, none aware of each other's identification scheme")
+ GIVEN(
+ "a controller bus, a controller driver, and a leaf driver, none aware of each other's signatureification scheme")
{
auto outer_bus = kstd::make_shared<controller_bus>("stacking_test_controller_bus");
diff --git a/kernel/kapi/devices/driver_registry.tests.cpp b/kernel/kapi/devices/driver_registry.tests.cpp
index 02f5065f..7b08799c 100644
--- a/kernel/kapi/devices/driver_registry.tests.cpp
+++ b/kernel/kapi/devices/driver_registry.tests.cpp
@@ -40,7 +40,7 @@ namespace
{
++*match_calls;
- auto const * identification = driver.facet<test_claim>();
+ auto const identification = driver.facet<test_claim>();
if (!identification)
{
return kstd::failure(kapi::devices::driver_match_errc::no_match);
@@ -107,11 +107,11 @@ namespace
mutable unsigned probe_calls;
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == test_claim::id)
{
- return static_cast<test_claim *>(this);
+ return kstd::make_observer<test_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
@@ -178,7 +178,7 @@ SCENARIO("Driver registry picks the highest-priority match", "[devices][driver_r
{
auto dev = kapi::devices::device_registry::get().find("driver_registry_priority_device");
REQUIRE(dev != nullptr);
- REQUIRE(dev->bound_driver() == high_priority.get());
+ REQUIRE(dev->bound_driver() == high_priority);
}
}
}
@@ -203,7 +203,7 @@ SCENARIO("Driver registry breaks ties by registration order", "[devices][driver_
{
auto dev = kapi::devices::device_registry::get().find("driver_registry_tie_device");
REQUIRE(dev != nullptr);
- REQUIRE(dev->bound_driver() == registered_first.get());
+ REQUIRE(dev->bound_driver() == registered_first);
}
}
}
@@ -255,7 +255,7 @@ SCENARIO("Driver registry leaves bound driver bound, even if better driver arriv
auto dev = kapi::devices::device_registry::get().find("driver_probe_failure_device");
REQUIRE(dev != nullptr);
REQUIRE(dev->state() == kapi::devices::state::bound);
- REQUIRE(dev->bound_driver() == lower.get());
+ REQUIRE(dev->bound_driver() == lower);
}
}
}
diff --git a/kernel/kapi/devices/facet_registry.cpp b/kernel/kapi/devices/facet_registry.cpp
index 2974c71e..f2f5d03b 100644
--- a/kernel/kapi/devices/facet_registry.cpp
+++ b/kernel/kapi/devices/facet_registry.cpp
@@ -46,7 +46,7 @@ namespace kapi::devices
}
auto facet_registry::do_publish(kstd::shared_ptr<device> device, kstd::string name, kapi::capabilities::facet_id id,
- void * facet) -> kstd::result<void>
+ kstd::observer_ptr<void> facet) -> kstd::result<void>
{
auto published = std::optional<entry>{};
@@ -169,7 +169,7 @@ namespace kapi::devices
return filtered;
}
- auto facet_registry::resolve(kapi::capabilities::facet_id facet, std::string_view name) -> void *
+ auto facet_registry::resolve(kapi::capabilities::facet_id facet, std::string_view name) -> kstd::observer_ptr<void>
{
auto found_device = kstd::shared_ptr<device>{};
{
@@ -193,7 +193,7 @@ namespace kapi::devices
return resolve(facet, *found_device);
}
- auto facet_registry::resolve(kapi::capabilities::facet_id id, device & device) -> void *
+ auto facet_registry::resolve(kapi::capabilities::facet_id id, device & device) -> kstd::observer_ptr<void>
{
if (auto by_device = device.facet(id))
{
diff --git a/kernel/kapi/devices/facet_registry.tests.cpp b/kernel/kapi/devices/facet_registry.tests.cpp
index 9396fc6c..f6735f01 100644
--- a/kernel/kapi/devices/facet_registry.tests.cpp
+++ b/kernel/kapi/devices/facet_registry.tests.cpp
@@ -50,15 +50,15 @@ namespace
return m_value;
}
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == probe_device::id)
{
- return static_cast<probe_device *>(this);
+ return kstd::make_observer<probe_device>(this);
}
if (facet == const_device::id)
{
- return m_const_device;
+ return kstd::observer_ptr{m_const_device};
}
return kapi::devices::device::query_facet(facet);
@@ -143,7 +143,7 @@ SCENARIO("Publishing and finding a device", "[kapi][devices][facet_registry]")
THEN("publishing a free standing second facet for the same device succeeds")
{
- REQUIRE(registry.publish(device, "probe0", &free_standing_facet));
+ REQUIRE(registry.publish(device, "probe0", kstd::make_observer(&free_standing_facet)));
}
AND_WHEN("getting all devices implementing that facet")
@@ -239,7 +239,7 @@ SCENARIO("Publishing and finding a device", "[kapi][devices][facet_registry]")
THEN("publishing the facet for the device fails")
{
- REQUIRE_FALSE(registry.publish(device, "probe0", &facet));
+ REQUIRE_FALSE(registry.publish(device, "probe0", kstd::make_observer(&facet)));
}
}
}
diff --git a/kernel/kernel/devices/pseudo.cpp b/kernel/kernel/devices/pseudo.cpp
index 13a8be3d..f5ee13c3 100644
--- a/kernel/kernel/devices/pseudo.cpp
+++ b/kernel/kernel/devices/pseudo.cpp
@@ -5,6 +5,7 @@
#include <kapi/capabilities/facet_id.hpp>
#include <kapi/devices.hpp>
+#include <kstd/memory.hpp>
#include <kstd/string.hpp>
#include <utility>
@@ -16,11 +17,11 @@ namespace kernel::devices
: kapi::devices::device{std::move(name)}
{}
- auto pseudo::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto pseudo::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == kernel::bus::pseudo_signature::id)
{
- return &m_signature;
+ return kstd::make_observer(&m_signature);
}
return device::query_facet(facet);
diff --git a/kernel/kernel/devices/pseudo.hpp b/kernel/kernel/devices/pseudo.hpp
index efd504d5..eabe59b0 100644
--- a/kernel/kernel/devices/pseudo.hpp
+++ b/kernel/kernel/devices/pseudo.hpp
@@ -6,6 +6,7 @@
#include <kapi/capabilities/facet_id.hpp>
#include <kapi/devices.hpp>
+#include <kstd/memory.hpp>
#include <kstd/string.hpp>
#include <string_view>
@@ -33,7 +34,7 @@ namespace kernel::devices
explicit pseudo(kstd::string name);
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override;
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override;
private:
pseudo_signature m_signature{*this};
diff --git a/kernel/kernel/drivers/pseudo/null.cpp b/kernel/kernel/drivers/pseudo/null.cpp
index 4c8bde12..9d8330b1 100644
--- a/kernel/kernel/drivers/pseudo/null.cpp
+++ b/kernel/kernel/drivers/pseudo/null.cpp
@@ -76,7 +76,7 @@ namespace kernel::drivers::pseudo
auto implementation = kstd::make_shared<null_node>();
auto published = kapi::devices::publish_facet<kapi::filesystem::character_special_file>(
- device.shared_from_this(), "null", implementation.get());
+ device.shared_from_this(), "null", kstd::make_observer(implementation.get()));
if (!published)
{
@@ -117,11 +117,11 @@ namespace kernel::drivers::pseudo
return names;
}
- auto null::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto null::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == kernel::bus::pseudo_claim::id)
{
- return static_cast<kernel::bus::pseudo_claim *>(this);
+ return kstd::make_observer<kernel::bus::pseudo_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
diff --git a/kernel/kernel/drivers/pseudo/null.hpp b/kernel/kernel/drivers/pseudo/null.hpp
index 6a736c33..ab8affeb 100644
--- a/kernel/kernel/drivers/pseudo/null.hpp
+++ b/kernel/kernel/drivers/pseudo/null.hpp
@@ -6,6 +6,7 @@
#include <kapi/devices.hpp>
#include <kapi/filesystem.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <cstdint>
@@ -36,7 +37,7 @@ namespace kernel::drivers::pseudo
[[nodiscard]] auto supported_names() const noexcept -> std::span<std::string_view const> override;
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override;
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override;
};
} // namespace kernel::drivers::pseudo
diff --git a/kernel/kernel/drivers/pseudo/zero.cpp b/kernel/kernel/drivers/pseudo/zero.cpp
index 67ec2519..fda28d35 100644
--- a/kernel/kernel/drivers/pseudo/zero.cpp
+++ b/kernel/kernel/drivers/pseudo/zero.cpp
@@ -77,7 +77,7 @@ namespace kernel::drivers::pseudo
auto implementation = kstd::make_shared<zero_node>();
auto published = kapi::devices::publish_facet<kapi::filesystem::character_special_file>(
- device.shared_from_this(), "zero", implementation.get());
+ device.shared_from_this(), "zero", kstd::make_observer(implementation.get()));
if (!published)
{
@@ -118,11 +118,11 @@ namespace kernel::drivers::pseudo
return names;
}
- auto zero::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto zero::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == kernel::bus::pseudo_claim::id)
{
- return static_cast<kernel::bus::pseudo_claim *>(this);
+ return kstd::make_observer<kernel::bus::pseudo_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
diff --git a/kernel/kernel/drivers/pseudo/zero.hpp b/kernel/kernel/drivers/pseudo/zero.hpp
index 7f26cc41..b5573e58 100644
--- a/kernel/kernel/drivers/pseudo/zero.hpp
+++ b/kernel/kernel/drivers/pseudo/zero.hpp
@@ -6,6 +6,7 @@
#include <kapi/devices.hpp>
#include <kapi/filesystem.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <cstdint>
@@ -31,7 +32,7 @@ namespace kernel::drivers::pseudo
[[nodiscard]] auto supported_names() const noexcept -> std::span<std::string_view const> override;
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override;
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override;
};
} // namespace kernel::drivers::pseudo
diff --git a/kernel/kernel/drivers/storage/ram_disk.cpp b/kernel/kernel/drivers/storage/ram_disk.cpp
index 80f7eedc..d33b7312 100644
--- a/kernel/kernel/drivers/storage/ram_disk.cpp
+++ b/kernel/kernel/drivers/storage/ram_disk.cpp
@@ -118,12 +118,12 @@ namespace kernel::drivers::storage
std::ranges::count_if(kapi::devices::facet_registry::get().all(kapi::filesystem::block_special_file::id),
[this](auto const & published) {
auto published_device = published.device();
- return published_device && published_device->bound_driver() == this;
+ return published_device && published_device->bound_driver().get() == this;
});
auto name = kstd::format("ram{}", next_index);
- auto published = kapi::devices::publish_facet<kapi::filesystem::block_special_file>(device.shared_from_this(), name,
- implementation.get());
+ auto published = kapi::devices::publish_facet<kapi::filesystem::block_special_file>(
+ device.shared_from_this(), name, kstd::make_observer(implementation.get()));
if (!published)
{
return published;
@@ -155,11 +155,11 @@ namespace kernel::drivers::storage
return "Generic RAM Disk";
}
- auto ram_disk::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto ram_disk::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == kapi::boot_modules::boot_module_claim::id)
{
- return static_cast<kapi::boot_modules::boot_module_claim *>(this);
+ return kstd::make_observer<kapi::boot_modules::boot_module_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
diff --git a/kernel/kernel/drivers/storage/ram_disk.hpp b/kernel/kernel/drivers/storage/ram_disk.hpp
index a526435b..1f7d5774 100644
--- a/kernel/kernel/drivers/storage/ram_disk.hpp
+++ b/kernel/kernel/drivers/storage/ram_disk.hpp
@@ -5,6 +5,7 @@
#include <kapi/capabilities/facet_id.hpp>
#include <kapi/devices.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <cstdint>
@@ -28,7 +29,7 @@ namespace kernel::drivers::storage
[[nodiscard]] auto name() const noexcept -> std::string_view override;
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override;
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override;
};
} // namespace kernel::drivers::storage
diff --git a/kernel/kernel/test_support/devices/block_device.cpp b/kernel/kernel/test_support/devices/block_device.cpp
index 462dc79d..fa834122 100644
--- a/kernel/kernel/test_support/devices/block_device.cpp
+++ b/kernel/kernel/test_support/devices/block_device.cpp
@@ -3,6 +3,7 @@
#include <kapi/devices.hpp>
#include <kapi/filesystem.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <kstd/string.hpp>
#include <kstd/units.hpp>
@@ -68,11 +69,11 @@ namespace kernel::tests::devices
return kstd::bytes{data.size()};
}
- auto block_device::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto block_device::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == kapi::filesystem::block_special_file::id)
{
- return static_cast<kapi::filesystem::block_special_file *>(this);
+ return kstd::make_observer<kapi::filesystem::block_special_file>(this);
}
return kapi::devices::device::query_facet(facet);
diff --git a/kernel/kernel/test_support/devices/block_device.hpp b/kernel/kernel/test_support/devices/block_device.hpp
index 9e64ed18..94c9a58d 100644
--- a/kernel/kernel/test_support/devices/block_device.hpp
+++ b/kernel/kernel/test_support/devices/block_device.hpp
@@ -4,6 +4,7 @@
#include <kapi/devices.hpp>
#include <kapi/filesystem.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <kstd/string.hpp>
#include <kstd/units.hpp>
@@ -29,7 +30,7 @@ namespace kernel::tests::devices
kstd::vector<std::uint8_t> data{};
private:
- [[nodiscard]] auto query_facet(kapi::capabilities::facet_id facet) -> void * override;
+ [[nodiscard]] auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override;
kstd::bytes m_block_size{};
};
diff --git a/kernel/kernel/vfs/device_inode.cpp b/kernel/kernel/vfs/device_inode.cpp
index e9c70f15..75ed03d6 100644
--- a/kernel/kernel/vfs/device_inode.cpp
+++ b/kernel/kernel/vfs/device_inode.cpp
@@ -89,12 +89,12 @@ namespace kernel::vfs
auto device_inode::is_block_device() const -> bool
{
- return kapi::devices::facet_registry::get().resolve<kapi::filesystem::block_special_file>(*m_device);
+ return !!kapi::devices::facet_registry::get().resolve<kapi::filesystem::block_special_file>(*m_device);
}
auto device_inode::is_character_device() const -> bool
{
- return kapi::devices::facet_registry::get().resolve<kapi::filesystem::character_special_file>(*m_device);
+ return !!kapi::devices::facet_registry::get().resolve<kapi::filesystem::character_special_file>(*m_device);
}
auto device_inode::status() const -> kstd::result<kapi::filesystem::file_status>