mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-02 17:28:48 +00:00
Kernel: Remove an allocation from VFS::resolve_path_without_veil (#7287)
Use GenericLexer to replace a call to StringView::split() since that returns its result in a heap-allocating Vector.
This commit is contained in:
parent
467ceb15aa
commit
e16a50b586
Notes:
sideshowbarker
2024-07-18 17:35:03 +09:00
Author: https://github.com/Maato
Commit: e16a50b586
Pull-request: https://github.com/SerenityOS/serenity/pull/7287
Reviewed-by: https://github.com/awesomekling
1 changed files with 9 additions and 4 deletions
|
@ -941,13 +941,19 @@ KResultOr<NonnullRefPtr<Custody>> VFS::resolve_path_without_veil(StringView path
|
|||
if (path.is_empty())
|
||||
return EINVAL;
|
||||
|
||||
auto parts = path.split_view('/', true);
|
||||
GenericLexer path_lexer(path);
|
||||
auto current_process = Process::current();
|
||||
auto& current_root = current_process->root_directory();
|
||||
|
||||
NonnullRefPtr<Custody> custody = path[0] == '/' ? current_root : base;
|
||||
bool extra_iteration = path[path.length() - 1] == '/';
|
||||
|
||||
while (!path_lexer.is_eof() || extra_iteration) {
|
||||
if (path_lexer.is_eof())
|
||||
extra_iteration = false;
|
||||
auto part = path_lexer.consume_until('/');
|
||||
path_lexer.consume_specific('/');
|
||||
|
||||
for (size_t i = 0; i < parts.size(); ++i) {
|
||||
Custody& parent = custody;
|
||||
auto parent_metadata = parent.inode().metadata();
|
||||
if (!parent_metadata.is_directory())
|
||||
|
@ -956,8 +962,7 @@ KResultOr<NonnullRefPtr<Custody>> VFS::resolve_path_without_veil(StringView path
|
|||
if (!parent_metadata.may_execute(*current_process))
|
||||
return EACCES;
|
||||
|
||||
auto& part = parts[i];
|
||||
bool have_more_parts = i + 1 < parts.size();
|
||||
bool have_more_parts = !path_lexer.is_eof() || extra_iteration;
|
||||
|
||||
if (part == "..") {
|
||||
// If we encounter a "..", take a step back, but don't go beyond the root.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue