From 97cb9cf469f4131e0fdf282a2765d231c963289c Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Tue, 30 Jan 2024 16:38:56 +0000 Subject: [PATCH] LibCore: Use Core::Environment instead of manually iterating environ --- Userland/Libraries/LibCore/System.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 3528f4bae6..94a3ef8b68 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -1273,18 +1274,12 @@ ErrorOr adjtime(const struct timeval* delta, struct timeval* old_delta) ErrorOr exec_command(Vector& command, bool preserve_env) { Vector exec_environment; - for (size_t i = 0; environ[i]; ++i) { - StringView env_view { environ[i], strlen(environ[i]) }; - auto maybe_needle = env_view.find('='); - - if (!maybe_needle.has_value()) - continue; - + for (auto entry : Environment::entries()) { // FIXME: Allow a custom selection of variables once ArgsParser supports options with optional parameters. - if (!preserve_env && env_view.substring_view(0, maybe_needle.value()) != "TERM"sv) + if (!preserve_env && entry.name != "TERM"sv) continue; - exec_environment.append(env_view); + exec_environment.append(entry.full_entry); } TRY(Core::System::exec(command.at(0), command, Core::System::SearchInPath::Yes, exec_environment)); @@ -1322,8 +1317,7 @@ ErrorOr exec(StringView filename, ReadonlySpan arguments, Sear if (environment.has_value()) { env_count = environment->size(); } else { - for (size_t i = 0; environ[i]; ++i) - ++env_count; + env_count = Core::Environment::size(); } auto environment_strings = TRY(FixedArray::create(env_count)); @@ -1332,8 +1326,9 @@ ErrorOr exec(StringView filename, ReadonlySpan arguments, Sear environment_strings[i] = { environment->at(i).characters_without_null_termination(), environment->at(i).length() }; } } else { - for (size_t i = 0; i < env_count; ++i) { - environment_strings[i] = { environ[i], strlen(environ[i]) }; + size_t i = 0; + for (auto entry : Core::Environment::entries()) { + environment_strings[i++] = { entry.full_entry.characters_without_null_termination(), entry.full_entry.length() }; } } params.environment.strings = environment_strings.data();