diff --git a/Kernel/FileSystem/FileDescription.cpp b/Kernel/FileSystem/FileDescription.cpp index 8af6efb8a0..5d14f6f6dc 100644 --- a/Kernel/FileSystem/FileDescription.cpp +++ b/Kernel/FileSystem/FileDescription.cpp @@ -27,25 +27,34 @@ namespace Kernel { KResultOr> FileDescription::create(Custody& custody) { - auto description = adopt_ref(*new FileDescription(InodeFile::create(custody.inode()))); + auto inode_file = InodeFile::create(custody.inode()); + if (inode_file.is_error()) + return inode_file.error(); + + auto description = adopt_ref_if_nonnull(new FileDescription(*inode_file.release_value())); + if (!description) + return ENOMEM; + description->m_custody = custody; auto result = description->attach(); if (result.is_error()) { dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for custody: {}", result); return result; } - return description; + return description.release_nonnull(); } KResultOr> FileDescription::create(File& file) { - auto description = adopt_ref(*new FileDescription(file)); + auto description = adopt_ref_if_nonnull(new FileDescription(file)); + if (!description) + return ENOMEM; auto result = description->attach(); if (result.is_error()) { dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for file: {}", result); return result; } - return description; + return description.release_nonnull(); } FileDescription::FileDescription(File& file)