From ba106f6bf5c791694944c71a46227b578bc25204 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 5 May 2026 01:43:52 +0300 Subject: [PATCH] LibC: Update argv[0] for shebang scripts to full path This is needed so `dirname -- "$0"` works with shebang scripts found in PATH --- userspace/libraries/LibC/unistd.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/userspace/libraries/LibC/unistd.cpp b/userspace/libraries/LibC/unistd.cpp index 025ad3e1..113a420e 100644 --- a/userspace/libraries/LibC/unistd.cpp +++ b/userspace/libraries/LibC/unistd.cpp @@ -504,9 +504,11 @@ static int exec_impl_shebang(FILE* fp, const char* pathname, char* const* argv, new_argv[0] = const_cast(pathname); if (!argument.empty()) new_argv[1] = const_cast(argument.data()); - for (size_t i = 0; i < old_argc; i++) - new_argv[i + extra_args] = argv[i]; - new_argv[old_argc + extra_args] = nullptr; + if (old_argc) + new_argv[extra_args] = const_cast(pathname); + for (size_t i = 1; i < old_argc; i++) + new_argv[extra_args + i] = argv[i]; + new_argv[extra_args + old_argc] = nullptr; exec_impl(interpreter.data(), new_argv, envp, true, shebang_depth + 1); free(new_argv);