diff options
| author | Ron Yorston <rmy@pobox.com> | 2024-07-07 10:18:54 +0100 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2024-07-07 10:18:54 +0100 |
| commit | f4fc4fb51fcba40a5db81861629fff27d73bed85 (patch) | |
| tree | 9480b772b9ba823f0a7082cfabef7bc5e10370ef /shell | |
| parent | 480ebf43e85b2cfc31c433ee8bb3a723e44e9f9f (diff) | |
| download | busybox-w32-f4fc4fb51fcba40a5db81861629fff27d73bed85.tar.gz busybox-w32-f4fc4fb51fcba40a5db81861629fff27d73bed85.tar.bz2 busybox-w32-f4fc4fb51fcba40a5db81861629fff27d73bed85.zip | |
ash: special hack for libtool
Libtool assumes the host environment is MSYS2 and will be confused by
Windows-style command switches. The "/c" in "cmd /c" looks like a path,
which MSYS2 incorrectly decodes to "c:/". Anticipating this, libtool
encodes these calls as "cmd //c" which does not work outside MSYS2. A
busybox-w32 patch makes it behave like MSYS2 in just this one case.
Adds 88-96 bytes.
(GitHub issue #297 and https://github.com/skeeto/w64devkit/issues/50)
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/ash.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c index b894a2314..e2dcb0962 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -9142,6 +9142,16 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) const char *cmd, char **argv, c | |||
| 9142 | #endif | 9142 | #endif |
| 9143 | 9143 | ||
| 9144 | #if ENABLE_PLATFORM_MINGW32 | 9144 | #if ENABLE_PLATFORM_MINGW32 |
| 9145 | /* Workaround for libtool, which assumes the host is an MSYS2 | ||
| 9146 | * environment and requires special-case escaping for cmd.exe. | ||
| 9147 | * https://github.com/skeeto/w64devkit/issues/50 */ | ||
| 9148 | if (string_array_len(argv) >= 3 && | ||
| 9149 | strcmp(argv[0], "cmd") == 0 && | ||
| 9150 | strcmp(argv[1], "//c") == 0 && | ||
| 9151 | strcmp(argv[2], "echo") == 0) { | ||
| 9152 | argv[1]++; /* drop extra slash */ | ||
| 9153 | } | ||
| 9154 | |||
| 9145 | /* cmd was allocated on the stack with room for an extension */ | 9155 | /* cmd was allocated on the stack with room for an extension */ |
| 9146 | add_win32_extension((char *)cmd); | 9156 | add_win32_extension((char *)cmd); |
| 9147 | execve(cmd, argv, envp); | 9157 | execve(cmd, argv, envp); |
