mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 22:38:12 +00:00
Kernel: Move DevFS APIs towards OOM safety
This commit is contained in:
parent
d2d6ab40f9
commit
8f9872581b
1 changed files with 11 additions and 7 deletions
|
@ -275,13 +275,15 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(const Stri
|
||||||
}
|
}
|
||||||
if (name != "pts")
|
if (name != "pts")
|
||||||
return EROFS;
|
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))
|
if (!m_subfolders.try_ensure_capacity(m_subfolders.size() + 1))
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
|
if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
m_subfolders.append(new_directory_inode);
|
m_subfolders.append(*new_directory_inode);
|
||||||
m_parent_fs.m_nodes.append(new_directory_inode);
|
m_parent_fs.m_nodes.append(*new_directory_inode);
|
||||||
return KResult(KSuccess);
|
return KResult(KSuccess);
|
||||||
}
|
}
|
||||||
if (metadata.is_symlink()) {
|
if (metadata.is_symlink()) {
|
||||||
|
@ -289,14 +291,16 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(const Stri
|
||||||
if (link.name() == name)
|
if (link.name() == name)
|
||||||
return EEXIST;
|
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))
|
if (!m_links.try_ensure_capacity(m_links.size() + 1))
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
|
if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
m_links.append(new_link_inode);
|
m_links.append(*new_link_inode);
|
||||||
m_parent_fs.m_nodes.append(new_link_inode);
|
m_parent_fs.m_nodes.append(*new_link_inode);
|
||||||
return new_link_inode;
|
return new_link_inode.release_nonnull();
|
||||||
}
|
}
|
||||||
return EROFS;
|
return EROFS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue