main/client: use $PWD for cwd, when $PWD is valid

If $PWD is set, and its resolved path matches the *actual* working
directory, use $PWD for cwd when instantiating the terminal.

This makes a difference when $PWD refers to a symlink; before this
patch, we’d instantiate the terminal in the *resolved* path. Now it’ll
use the symlink instead.
This commit is contained in:
Daniel Eklöf 2022-09-26 19:09:33 +02:00
parent 9e58661093
commit 90ce4f3008
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 44 additions and 0 deletions

View file

@ -408,6 +408,28 @@ main(int argc, char *const *argv)
cwd = _cwd;
}
const char *pwd = getenv("PWD");
if (pwd != NULL) {
char *resolved_path_cwd = realpath(cwd, NULL);
char *resolved_path_pwd = realpath(pwd, NULL);
if (resolved_path_cwd != NULL &&
resolved_path_pwd != NULL &&
strcmp(resolved_path_cwd, resolved_path_pwd) == 0)
{
/*
* The resolved path of $PWD matches the resolved path of
* the *actual* working directory - use $PWD.
*
* This makes a difference when $PWD refers to a symlink.
*/
cwd = pwd;
}
free(resolved_path_cwd);
free(resolved_path_pwd);
}
if (client_environment) {
for (char **e = environ; *e != NULL; e++) {
if (!push_string(&envp, *e, &total_len))