From 3971f712351f5ccab0bc100ca968c4ebbb99cca4 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sat, 12 Mar 2022 20:40:32 +0000 Subject: [PATCH] Terminal: Use Core::System::exec() --- Userland/Applications/Terminal/main.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Userland/Applications/Terminal/main.cpp b/Userland/Applications/Terminal/main.cpp index d94066e156..f080476489 100644 --- a/Userland/Applications/Terminal/main.cpp +++ b/Userland/Applications/Terminal/main.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -132,7 +133,7 @@ static void utmp_update(String const& tty, pid_t pid, bool create) } } -static void run_command(String command, bool keep_open) +static ErrorOr run_command(String command, bool keep_open) { String shell = "/bin/Shell"; auto* pw = getpwuid(getuid()); @@ -141,20 +142,16 @@ static void run_command(String command, bool keep_open) } endpwent(); - char const* args[5] = { shell.characters(), nullptr, nullptr, nullptr, nullptr }; + Vector arguments; + arguments.append(shell); if (!command.is_empty()) { - int arg_index = 1; if (keep_open) - args[arg_index++] = "--keep-open"; - args[arg_index++] = "-c"; - args[arg_index++] = command.characters(); - } - char const* envs[] = { "TERM=xterm", "PAGER=more", "PATH=/usr/local/bin:/usr/bin:/bin", nullptr }; - int rc = execve(shell.characters(), const_cast(args), const_cast(envs)); - if (rc < 0) { - perror("execve"); - exit(1); + arguments.append("--keep-open"); + arguments.append("-c"); + arguments.append(command); } + auto env = TRY(FixedArray::try_create({ "TERM=xterm", "PAGER=more", "PATH=/usr/local/bin:/usr/bin:/bin" })); + TRY(Core::System::exec(shell, arguments, Core::System::SearchInPath::No, env.span())); VERIFY_NOT_REACHED(); } @@ -270,9 +267,9 @@ ErrorOr serenity_main(Main::Arguments arguments) if (shell_pid == 0) { close(ptm_fd); if (command_to_execute) - run_command(command_to_execute, keep_open); + TRY(run_command(command_to_execute, keep_open)); else - run_command(Config::read_string("Terminal", "Startup", "Command", ""), false); + TRY(run_command(Config::read_string("Terminal", "Startup", "Command", ""), false)); VERIFY_NOT_REACHED(); }