Forráskód Böngészése

Kernel: Move DevFS APIs towards OOM safety

Brian Gianforcaro 4 éve
szülő
commit
8f9872581b
1 módosított fájl, 11 hozzáadás és 7 törlés
  1. 11 7
      Kernel/FileSystem/DevFS.cpp

+ 11 - 7
Kernel/FileSystem/DevFS.cpp

@@ -275,13 +275,15 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(const Stri
         }
         if (name != "pts")
             return EROFS;
-        auto new_directory_inode = adopt_ref(*new DevFSPtsDirectoryInode(m_parent_fs));
+        auto new_directory_inode = adopt_ref_if_nonnull(new DevFSPtsDirectoryInode(m_parent_fs));
+        if (!new_directory_inode)
+            return ENOMEM;
         if (!m_subfolders.try_ensure_capacity(m_subfolders.size() + 1))
             return ENOMEM;
         if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
             return ENOMEM;
-        m_subfolders.append(new_directory_inode);
-        m_parent_fs.m_nodes.append(new_directory_inode);
+        m_subfolders.append(*new_directory_inode);
+        m_parent_fs.m_nodes.append(*new_directory_inode);
         return KResult(KSuccess);
     }
     if (metadata.is_symlink()) {
@@ -289,14 +291,16 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(const Stri
             if (link.name() == name)
                 return EEXIST;
         }
-        auto new_link_inode = adopt_ref(*new DevFSLinkInode(m_parent_fs, name));
+        auto new_link_inode = adopt_ref_if_nonnull(new DevFSLinkInode(m_parent_fs, name));
+        if (!new_link_inode)
+            return ENOMEM;
         if (!m_links.try_ensure_capacity(m_links.size() + 1))
             return ENOMEM;
         if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
             return ENOMEM;
-        m_links.append(new_link_inode);
-        m_parent_fs.m_nodes.append(new_link_inode);
-        return new_link_inode;
+        m_links.append(*new_link_inode);
+        m_parent_fs.m_nodes.append(*new_link_inode);
+        return new_link_inode.release_nonnull();
     }
     return EROFS;
 }