diff options
| author | Ron Yorston <rmy@pobox.com> | 2024-05-21 08:36:09 +0100 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2024-05-21 08:36:09 +0100 |
| commit | 05b053cd388219d6b194b99ce9e543271dab121f (patch) | |
| tree | a48d01ac29f51b93a5b4b41e271478fb6ddf8446 /shell | |
| parent | 97c9c40deb0774ffa55e65976c11ae1d51832898 (diff) | |
| download | busybox-w32-05b053cd388219d6b194b99ce9e543271dab121f.tar.gz busybox-w32-05b053cd388219d6b194b99ce9e543271dab121f.tar.bz2 busybox-w32-05b053cd388219d6b194b99ce9e543271dab121f.zip | |
ash: prevent mintty from setting HOME
The Cygwin terminal program mintty sets the HOME environment
variable. Attempt to detect this and unset HOME so the usual
busybox-w32 initialisation of HOME is used instead.
Adds 80 bytes.
(GitHub issue #420)
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/ash.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index b753678c0..4fdc6f1c6 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -15886,9 +15886,16 @@ static void setvar_if_unset(const char *key, const char *value) | |||
| 15886 | #endif | 15886 | #endif |
| 15887 | 15887 | ||
| 15888 | #if ENABLE_PLATFORM_MINGW32 | 15888 | #if ENABLE_PLATFORM_MINGW32 |
| 15889 | /* | ||
| 15890 | * Detect if the environment contains certain mixed-case names: | ||
| 15891 | * | ||
| 15892 | * Home is present in a standard Windows environment | ||
| 15893 | * ComSpec is present in WINE | ||
| 15894 | * ProgramData is present in Cygwin/MSYS2 | ||
| 15895 | */ | ||
| 15889 | static int mixed_case_special_name(const char *envp) | 15896 | static int mixed_case_special_name(const char *envp) |
| 15890 | { | 15897 | { |
| 15891 | const char *names = "PATH=\0""COMSPEC=\0"; | 15898 | const char *names = "PATH=\0""COMSPEC=\0""PROGRAMDATA=\0"; |
| 15892 | const char *n; | 15899 | const char *n; |
| 15893 | 15900 | ||
| 15894 | for (n = names; *n; ) { | 15901 | for (n = names; *n; ) { |
| @@ -15936,6 +15943,11 @@ init(void) | |||
| 15936 | */ | 15943 | */ |
| 15937 | for (envp = environ; envp && *envp; envp++) { | 15944 | for (envp = environ; envp && *envp; envp++) { |
| 15938 | if (mixed_case_special_name(*envp)) { | 15945 | if (mixed_case_special_name(*envp)) { |
| 15946 | /* mintty sets HOME: unset it */ | ||
| 15947 | const char *tty = getenv("TERM_PROGRAM"); | ||
| 15948 | if (tty && strcmp(tty, "mintty") == 0) { | ||
| 15949 | unsetenv("HOME"); | ||
| 15950 | } | ||
| 15939 | break; | 15951 | break; |
| 15940 | } | 15952 | } |
| 15941 | } | 15953 | } |
