mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:48:12 +00:00
LibCore: Use Core::Environment instead of manually iterating environ
This commit is contained in:
parent
56b8e248a5
commit
97cb9cf469
1 changed files with 8 additions and 13 deletions
|
@ -15,6 +15,7 @@
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include <Kernel/API/BeepInstruction.h>
|
#include <Kernel/API/BeepInstruction.h>
|
||||||
|
#include <LibCore/Environment.h>
|
||||||
#include <LibCore/SessionManagement.h>
|
#include <LibCore/SessionManagement.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
@ -1273,18 +1274,12 @@ ErrorOr<void> adjtime(const struct timeval* delta, struct timeval* old_delta)
|
||||||
ErrorOr<void> exec_command(Vector<StringView>& command, bool preserve_env)
|
ErrorOr<void> exec_command(Vector<StringView>& command, bool preserve_env)
|
||||||
{
|
{
|
||||||
Vector<StringView> exec_environment;
|
Vector<StringView> exec_environment;
|
||||||
for (size_t i = 0; environ[i]; ++i) {
|
for (auto entry : Environment::entries()) {
|
||||||
StringView env_view { environ[i], strlen(environ[i]) };
|
|
||||||
auto maybe_needle = env_view.find('=');
|
|
||||||
|
|
||||||
if (!maybe_needle.has_value())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// FIXME: Allow a custom selection of variables once ArgsParser supports options with optional parameters.
|
// 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;
|
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));
|
TRY(Core::System::exec(command.at(0), command, Core::System::SearchInPath::Yes, exec_environment));
|
||||||
|
@ -1322,8 +1317,7 @@ ErrorOr<void> exec(StringView filename, ReadonlySpan<StringView> arguments, Sear
|
||||||
if (environment.has_value()) {
|
if (environment.has_value()) {
|
||||||
env_count = environment->size();
|
env_count = environment->size();
|
||||||
} else {
|
} else {
|
||||||
for (size_t i = 0; environ[i]; ++i)
|
env_count = Core::Environment::size();
|
||||||
++env_count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto environment_strings = TRY(FixedArray<Syscall::StringArgument>::create(env_count));
|
auto environment_strings = TRY(FixedArray<Syscall::StringArgument>::create(env_count));
|
||||||
|
@ -1332,8 +1326,9 @@ ErrorOr<void> exec(StringView filename, ReadonlySpan<StringView> arguments, Sear
|
||||||
environment_strings[i] = { environment->at(i).characters_without_null_termination(), environment->at(i).length() };
|
environment_strings[i] = { environment->at(i).characters_without_null_termination(), environment->at(i).length() };
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (size_t i = 0; i < env_count; ++i) {
|
size_t i = 0;
|
||||||
environment_strings[i] = { environ[i], strlen(environ[i]) };
|
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();
|
params.environment.strings = environment_strings.data();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue