diff --git a/Kernel/ACPI/Parser.cpp b/Kernel/ACPI/Parser.cpp index 06f3147584..55be2b0d59 100644 --- a/Kernel/ACPI/Parser.cpp +++ b/Kernel/ACPI/Parser.cpp @@ -33,9 +33,7 @@ UNMAP_AFTER_INIT NonnullRefPtr ACPISysFSComponent::create(St KResultOr ACPISysFSComponent::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription*) const { - auto blob = try_to_generate_buffer(); - if (!blob) - return KResult(EFAULT); + auto blob = TRY(try_to_generate_buffer()); if ((size_t)offset >= blob->size()) return KSuccess; @@ -45,7 +43,7 @@ KResultOr ACPISysFSComponent::read_bytes(off_t offset, size_t count, Use return nread; } -OwnPtr ACPISysFSComponent::try_to_generate_buffer() const +KResultOr> ACPISysFSComponent::try_to_generate_buffer() const { auto acpi_blob = Memory::map_typed((m_paddr), m_length); return KBuffer::try_create_with_bytes(Span { acpi_blob.ptr(), m_length }); diff --git a/Kernel/ACPI/Parser.h b/Kernel/ACPI/Parser.h index 3b046cee1b..3180da8375 100644 --- a/Kernel/ACPI/Parser.h +++ b/Kernel/ACPI/Parser.h @@ -31,7 +31,7 @@ public: virtual KResultOr read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const override; protected: - OwnPtr try_to_generate_buffer() const; + KResultOr> try_to_generate_buffer() const; ACPISysFSComponent(String name, PhysicalAddress, size_t table_size); PhysicalAddress m_paddr; diff --git a/Kernel/Arch/PC/BIOS.cpp b/Kernel/Arch/PC/BIOS.cpp index 703437b24c..6b3ef621c7 100644 --- a/Kernel/Arch/PC/BIOS.cpp +++ b/Kernel/Arch/PC/BIOS.cpp @@ -31,9 +31,7 @@ UNMAP_AFTER_INIT BIOSSysFSComponent::BIOSSysFSComponent(String name) KResultOr BIOSSysFSComponent::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription*) const { - auto blob = try_to_generate_buffer(); - if (!blob) - return KResult(EFAULT); + auto blob = TRY(try_to_generate_buffer()); if ((size_t)offset >= blob->size()) return KSuccess; @@ -50,7 +48,7 @@ UNMAP_AFTER_INIT DMIEntryPointExposedBlob::DMIEntryPointExposedBlob(PhysicalAddr { } -OwnPtr DMIEntryPointExposedBlob::try_to_generate_buffer() const +KResultOr> DMIEntryPointExposedBlob::try_to_generate_buffer() const { auto dmi_blob = Memory::map_typed((m_dmi_entry_point), m_dmi_entry_point_length); return KBuffer::try_create_with_bytes(Span { dmi_blob.ptr(), m_dmi_entry_point_length }); @@ -68,7 +66,7 @@ UNMAP_AFTER_INIT SMBIOSExposedTable::SMBIOSExposedTable(PhysicalAddress smbios_s { } -OwnPtr SMBIOSExposedTable::try_to_generate_buffer() const +KResultOr> SMBIOSExposedTable::try_to_generate_buffer() const { auto dmi_blob = Memory::map_typed((m_smbios_structure_table), m_smbios_structure_table_length); return KBuffer::try_create_with_bytes(Span { dmi_blob.ptr(), m_smbios_structure_table_length }); diff --git a/Kernel/Arch/PC/BIOS.h b/Kernel/Arch/PC/BIOS.h index 5eeae707d6..8e2d539d35 100644 --- a/Kernel/Arch/PC/BIOS.h +++ b/Kernel/Arch/PC/BIOS.h @@ -63,7 +63,7 @@ public: virtual KResultOr read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const override; protected: - virtual OwnPtr try_to_generate_buffer() const = 0; + virtual KResultOr> try_to_generate_buffer() const = 0; explicit BIOSSysFSComponent(String name); }; @@ -73,7 +73,7 @@ public: private: DMIEntryPointExposedBlob(PhysicalAddress dmi_entry_point, size_t blob_size); - virtual OwnPtr try_to_generate_buffer() const override; + virtual KResultOr> try_to_generate_buffer() const override; PhysicalAddress m_dmi_entry_point; size_t m_dmi_entry_point_length; }; @@ -84,7 +84,7 @@ public: private: SMBIOSExposedTable(PhysicalAddress dmi_entry_point, size_t blob_size); - virtual OwnPtr try_to_generate_buffer() const override; + virtual KResultOr> try_to_generate_buffer() const override; PhysicalAddress m_smbios_structure_table; size_t m_smbios_structure_table_length; diff --git a/Kernel/Bus/PCI/SysFSPCI.cpp b/Kernel/Bus/PCI/SysFSPCI.cpp index 56a0f6ec9b..3a6e57dbfa 100644 --- a/Kernel/Bus/PCI/SysFSPCI.cpp +++ b/Kernel/Bus/PCI/SysFSPCI.cpp @@ -62,9 +62,7 @@ PCIDeviceAttributeSysFSComponent::PCIDeviceAttributeSysFSComponent(String name, KResultOr PCIDeviceAttributeSysFSComponent::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription*) const { - auto blob = try_to_generate_buffer(); - if (!blob) - return KResult(EFAULT); + auto blob = TRY(try_to_generate_buffer()); if ((size_t)offset >= blob->size()) return KSuccess; @@ -74,7 +72,7 @@ KResultOr PCIDeviceAttributeSysFSComponent::read_bytes(off_t offset, siz return nread; } -OwnPtr PCIDeviceAttributeSysFSComponent::try_to_generate_buffer() const +KResultOr> PCIDeviceAttributeSysFSComponent::try_to_generate_buffer() const { String value; switch (m_field_bytes_width) { diff --git a/Kernel/Bus/PCI/SysFSPCI.h b/Kernel/Bus/PCI/SysFSPCI.h index e6ddd35216..9a3bc47f9f 100644 --- a/Kernel/Bus/PCI/SysFSPCI.h +++ b/Kernel/Bus/PCI/SysFSPCI.h @@ -41,7 +41,7 @@ public: virtual ~PCIDeviceAttributeSysFSComponent() {}; protected: - virtual OwnPtr try_to_generate_buffer() const; + KResultOr> try_to_generate_buffer() const; PCIDeviceAttributeSysFSComponent(String name, const PCIDeviceSysFSDirectory& device, size_t offset, size_t field_bytes_width); NonnullRefPtr m_device; size_t m_offset; diff --git a/Kernel/KBuffer.h b/Kernel/KBuffer.h index 7ac17dbe96..9091a9578e 100644 --- a/Kernel/KBuffer.h +++ b/Kernel/KBuffer.h @@ -114,12 +114,12 @@ public: return adopt_nonnull_own_or_enomem(new (nothrow) KBuffer(impl.release_nonnull())); } - [[nodiscard]] static OwnPtr try_create_with_bytes(ReadonlyBytes bytes, Memory::Region::Access access = Memory::Region::Access::ReadWrite, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) + static KResultOr> try_create_with_bytes(ReadonlyBytes bytes, Memory::Region::Access access = Memory::Region::Access::ReadWrite, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) { auto impl = KBufferImpl::try_create_with_bytes(bytes, access, name, strategy); if (!impl) - return {}; - return adopt_own_if_nonnull(new (nothrow) KBuffer(impl.release_nonnull())); + return ENOMEM; + return adopt_nonnull_own_or_enomem(new (nothrow) KBuffer(impl.release_nonnull())); } [[nodiscard]] static KBuffer copy(const void* data, size_t size, Memory::Region::Access access = Memory::Region::Access::ReadWrite, StringView name = "KBuffer") diff --git a/Kernel/Syscalls/module.cpp b/Kernel/Syscalls/module.cpp index 500b89f8b2..fe7066505b 100644 --- a/Kernel/Syscalls/module.cpp +++ b/Kernel/Syscalls/module.cpp @@ -27,9 +27,7 @@ KResultOr Process::sys$module_load(Userspace user_path, si auto description = TRY(VirtualFileSystem::the().open(path->view(), O_RDONLY, 0, current_directory())); auto payload = TRY(description->read_entire_file()); - auto storage = KBuffer::try_create_with_bytes(ReadonlyBytes { payload->data(), payload->size() }); - if (!storage) - return ENOMEM; + auto storage = TRY(KBuffer::try_create_with_bytes(ReadonlyBytes { payload->data(), payload->size() })); auto elf_image = try_make(storage->data(), storage->size()); if (!elf_image)