From b99b79d8080cc1491f96069677d9ce0b7775a4f0 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 9 Sep 2026 23:02:20 +0200 Subject: 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. --- kernel/kapi/boot_modules/device.cpp | 5 ++-- kernel/kapi/devices/bus.cpp | 6 ++--- kernel/kapi/devices/device.cpp | 10 ++++---- kernel/kapi/devices/driver.cpp | 3 ++- kernel/kapi/devices/driver.tests.cpp | 29 +++++++++++----------- kernel/kapi/devices/driver_registry.tests.cpp | 12 ++++----- kernel/kapi/devices/facet_registry.cpp | 6 ++--- kernel/kapi/devices/facet_registry.tests.cpp | 10 ++++---- kernel/kernel/devices/pseudo.cpp | 5 ++-- kernel/kernel/devices/pseudo.hpp | 3 ++- kernel/kernel/drivers/pseudo/null.cpp | 6 ++--- kernel/kernel/drivers/pseudo/null.hpp | 3 ++- kernel/kernel/drivers/pseudo/zero.cpp | 6 ++--- kernel/kernel/drivers/pseudo/zero.hpp | 3 ++- kernel/kernel/drivers/storage/ram_disk.cpp | 10 ++++---- kernel/kernel/drivers/storage/ram_disk.hpp | 3 ++- .../kernel/test_support/devices/block_device.cpp | 5 ++-- .../kernel/test_support/devices/block_device.hpp | 3 ++- kernel/kernel/vfs/device_inode.cpp | 4 +-- 19 files changed, 71 insertions(+), 61 deletions(-) (limited to 'kernel') 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 #include +#include #include #include @@ -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 { if (facet == boot_module_signature::id) { - return static_cast(this); + return kstd::make_observer(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 { 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 { 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 { return const_cast(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 { auto guard = kstd::lock_guard{m_lock}; - return m_driver.lock().get(); + return m_driver.lock(); } auto device::bind_driver(kstd::weak_ptr 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 { 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 #include +#include #include #include @@ -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 { 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 override { - auto const * signature = dev.facet(); - auto const * claim = drv.facet(); + auto const signature = dev.facet(); + auto const claim = drv.facet(); 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 override { if (facet == controller_signature::id) { - return static_cast(this); + return kstd::make_observer(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 override { if (facet == leaf_signature::id) { - return static_cast(this); + return kstd::make_observer(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 override { - auto const * ident = dev.facet(); - auto const * claims = drv.facet(); - if (!ident || !claims || !std::ranges::contains(claims->supported_names(), ident->leaf_name())) + auto const signature = dev.facet(); + auto const claims = drv.facet(); + 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 override { if (facet == controller_claim::id) { - return static_cast(this); + return kstd::make_observer(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 override { if (facet == leaf_claim::id) { - return static_cast(this); + return kstd::make_observer(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("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(); + auto const identification = driver.facet(); 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 override { if (facet == test_claim::id) { - return static_cast(this); + return kstd::make_observer(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, kstd::string name, kapi::capabilities::facet_id id, - void * facet) -> kstd::result + kstd::observer_ptr facet) -> kstd::result { auto published = std::optional{}; @@ -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 { auto found_device = kstd::shared_ptr{}; { @@ -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 { 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 override { if (facet == probe_device::id) { - return static_cast(this); + return kstd::make_observer(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 #include +#include #include #include @@ -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 { 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 #include +#include #include #include @@ -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 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(); auto published = kapi::devices::publish_facet( - 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 { if (facet == kernel::bus::pseudo_claim::id) { - return static_cast(this); + return kstd::make_observer(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 #include +#include #include #include @@ -36,7 +37,7 @@ namespace kernel::drivers::pseudo [[nodiscard]] auto supported_names() const noexcept -> std::span override; protected: - auto query_facet(kapi::capabilities::facet_id facet) -> void * override; + auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr 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(); auto published = kapi::devices::publish_facet( - 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 { if (facet == kernel::bus::pseudo_claim::id) { - return static_cast(this); + return kstd::make_observer(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 #include +#include #include #include @@ -31,7 +32,7 @@ namespace kernel::drivers::pseudo [[nodiscard]] auto supported_names() const noexcept -> std::span override; protected: - auto query_facet(kapi::capabilities::facet_id facet) -> void * override; + auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr 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(device.shared_from_this(), name, - implementation.get()); + auto published = kapi::devices::publish_facet( + 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 { if (facet == kapi::boot_modules::boot_module_claim::id) { - return static_cast(this); + return kstd::make_observer(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 #include +#include #include #include @@ -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 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 #include +#include #include #include #include @@ -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 { if (facet == kapi::filesystem::block_special_file::id) { - return static_cast(this); + return kstd::make_observer(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 #include +#include #include #include #include @@ -29,7 +30,7 @@ namespace kernel::tests::devices kstd::vector 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 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(*m_device); + return !!kapi::devices::facet_registry::get().resolve(*m_device); } auto device_inode::is_character_device() const -> bool { - return kapi::devices::facet_registry::get().resolve(*m_device); + return !!kapi::devices::facet_registry::get().resolve(*m_device); } auto device_inode::status() const -> kstd::result -- cgit v1.2.3