diff --git a/userspace/libraries/LibC/unistd.cpp b/userspace/libraries/LibC/unistd.cpp index 9f9a2aa3..f51ac762 100644 --- a/userspace/libraries/LibC/unistd.cpp +++ b/userspace/libraries/LibC/unistd.cpp @@ -426,10 +426,9 @@ char* getcwd(char* buf, size_t size) return nullptr; } - if ((char*)syscall(SYS_GET_PWD, buf, size) == nullptr) + if (syscall(SYS_GET_PWD, buf, size) == 0) return nullptr; - setenv("PWD", buf, 1); return buf; } diff --git a/userspace/programs/Shell/Builtin.cpp b/userspace/programs/Shell/Builtin.cpp index b356e1bc..55256f9b 100644 --- a/userspace/programs/Shell/Builtin.cpp +++ b/userspace/programs/Shell/Builtin.cpp @@ -134,21 +134,20 @@ void Builtin::initialize() return 1; } - BAN::StringView path; - - if (arguments.size() == 1) - { - if (const char* path_env = getenv("HOME")) - path = path_env; - else - return 0; - } + const char* path = nullptr; + if (arguments.size() == 2) + path = arguments[1].data(); else - path = arguments[1]; + path = getenv("HOME"); - if (chdir(path.data()) == -1) + if (path == nullptr) + return 0; + + if (chdir(path) == -1) ERROR_RETURN("chdir", 1); + setenv("PWD", path, 1); + return 0; }, true )); diff --git a/userspace/programs/Shell/main.cpp b/userspace/programs/Shell/main.cpp index a863aee1..dbff2d31 100644 --- a/userspace/programs/Shell/main.cpp +++ b/userspace/programs/Shell/main.cpp @@ -28,6 +28,12 @@ int main(int argc, char** argv) sigaction(SIGTTOU, &sa, nullptr); } + { + char cwd_buffer[PATH_MAX]; + if (getcwd(cwd_buffer, sizeof(cwd_buffer))) + setenv("PWD", cwd_buffer, 1); + } + Builtin::get().initialize(); for (int i = 1; i < argc; i++)