1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 12:35:08 +00:00

Kernel: Add KLexicalPath::try_join and use it

This adds KLexicalPath::try_join(). As this cannot be done without
allocation, it uses KString and can fail. This patch also uses it at one
place. All the other cases of String::formatted("{}/{}", ...) currently
rely on the return value being a String, which means they cannot easily
be converted to use the new API.
This commit is contained in:
Max Wipfli 2021-07-06 12:05:50 +02:00 committed by Andreas Kling
parent ee342f5ec3
commit 1f792faf34
3 changed files with 35 additions and 1 deletions

View file

@ -361,7 +361,10 @@ KResult VFS::mknod(StringView path, mode_t mode, dev_t dev, Custody& base)
KResultOr<NonnullRefPtr<FileDescription>> VFS::create(StringView path, int options, mode_t mode, Custody& parent_custody, Optional<UidAndGid> owner)
{
auto basename = KLexicalPath::basename(path);
if (auto result = validate_path_against_process_veil(String::formatted("{}/{}", parent_custody.absolute_path(), basename), options); result.is_error())
auto full_path = KLexicalPath::try_join(parent_custody.absolute_path(), basename);
if (!full_path)
return ENOMEM;
if (auto result = validate_path_against_process_veil(full_path->view(), options); result.is_error())
return result;
if (!is_socket(mode) && !is_fifo(mode) && !is_block_device(mode) && !is_character_device(mode)) {