slave: don't skip setting environment variables when using a custom environment

When launching footclient with -E,--client-environment the environment
variables that should be set by foot, wasn't.

Those variables are:

* TERM
* COLORTERM
* PWD
* SHELL

and all variables defined by the user in the [environment] section in
foot.ini.

In the same way, we did not *unset* TERM_PROGRAM and
TERM_PROGRAM_VERSION.

This patch fixes it by "cloning" the custom environment, making it
mutable, and then adding/removing the variables above from it.

Instead of calling setenv()/unsetenv() directly, we add the wrapper
functions add_to_env() and del_from_env().

When *not* using a custom environment, they simply call
setenv()/unsetenv().

When we *are* using a custom environment, add_to_env() first loops all
existing variables, looking for a match. If a match is found, it's
updated with the new value. If it's not found, a new entry is added.

del_from_env() loops all entries, and removes it when a match is
found. If no match is found, nothing is done.

The mutable environment is allocated on the heap, but never free:d. We
don't need to free it, since it's only allocated after forking, in the
child process.

Closes #1568
This commit is contained in:
Daniel Eklöf 2024-01-09 16:50:47 +01:00
parent 208008d717
commit 9da7152f83
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 141 additions and 18 deletions

View file

@ -82,9 +82,12 @@
`cursor-shape-v1` Wayland protocols ([#1573][1573]).
* Crash in `--server` mode when one or more environment variables are
set in `[environment]`.
* Environment variables normally set by foot lost with `footclient
-E,--client-environment` ([#1568][1568]).
[1531]: https://codeberg.org/dnkl/foot/issues/1531
[1573]: https://codeberg.org/dnkl/foot/issues/1573
[1568]: https://codeberg.org/dnkl/foot/issues/1568
### Security