From f41697493de1a25d0f56930d81cf9560172ce7b7 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 14 Jun 2020 10:17:04 +0100 Subject: win32: enable globbing by default Change how busybox.exe expands wildcards on the command line. When globbing is enabled at compile time provide an implementation of _setargv(), which is run early during startup of C programs. This: - enables globbing by setting _dowildcard to -1 - checks for the presence of the environment BB_GLOBBING - if it exists and is set to 0 disables globbing - if it doesn't exist sets BB_GLOBBING=0 but continues to apply Windows' globbing in the current process The consequences of this are: - When busybox.exe is initially run from a Command Prompt Windows' globbing is applied; - Windows' globbing is turned off for future child processes, thus allowing the shell re-execute busybox.exe without it interfering with wildcards; - this behaviour can be overridden by setting BB_GLOBBING explicitly. Globbing can still be disabled at compile time if required. In that case BB_GLOBBING has no effect. With these changes globbing can be enabled by default and BusyBox will do the right thing in most circumstances. (See GitHub issues #172 and #189.) --- Config.in | 10 +++++----- configs/mingw32_defconfig | 4 ++-- configs/mingw64_defconfig | 4 ++-- libbb/appletlib.c | 5 ----- win32/mingw.c | 18 +++++++++++++++++- 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/Config.in b/Config.in index df8ecc3f0..d18f3dac5 100644 --- a/Config.in +++ b/Config.in @@ -387,15 +387,15 @@ comment 'Settings for MINGW32' config GLOBBING bool "Allow busybox.exe to expand wildcards" - default n + default y depends on PLATFORM_MINGW32 help In Microsoft Windows expansion of wildcards on the command line ('globbing') is handled by the C runtime while the BusyBox shell - does its own wildcard expansion. For best results when using the - shell globbing by the C runtime should be turned off. If you want - the BusyBox binary to handle wildcard expansion using the C runtime - set this to 'Y'. + does its own wildcard expansion. In most circumstances BusyBox + will do the right thing. If it doesn't or if you don't need to + use BusyBox applets from the Windows Command Prompt you can stop + busybox.exe from expanding wildcards by setting this to 'N'. choice prompt "Random number generator" diff --git a/configs/mingw32_defconfig b/configs/mingw32_defconfig index bffe88842..b3dfc0033 100644 --- a/configs/mingw32_defconfig +++ b/configs/mingw32_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.32.0.git -# Fri May 29 10:58:25 2020 +# Sun Jun 14 09:30:06 2020 # CONFIG_HAVE_DOT_CONFIG=y # CONFIG_PLATFORM_POSIX is not set @@ -43,7 +43,7 @@ CONFIG_BUSYBOX_EXEC_PATH="" # # Settings for MINGW32 # -# CONFIG_GLOBBING is not set +CONFIG_GLOBBING=y CONFIG_FEATURE_PRNG_SHELL=y # CONFIG_FEATURE_PRNG_ISAAC is not set CONFIG_FEATURE_RESOURCES=y diff --git a/configs/mingw64_defconfig b/configs/mingw64_defconfig index d0a541162..2410d476d 100644 --- a/configs/mingw64_defconfig +++ b/configs/mingw64_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.32.0.git -# Fri May 29 10:59:57 2020 +# Sun Jun 14 09:30:06 2020 # CONFIG_HAVE_DOT_CONFIG=y # CONFIG_PLATFORM_POSIX is not set @@ -43,7 +43,7 @@ CONFIG_BUSYBOX_EXEC_PATH="" # # Settings for MINGW32 # -# CONFIG_GLOBBING is not set +CONFIG_GLOBBING=y CONFIG_FEATURE_PRNG_SHELL=y # CONFIG_FEATURE_PRNG_ISAAC is not set CONFIG_FEATURE_RESOURCES=y diff --git a/libbb/appletlib.c b/libbb/appletlib.c index 9caa04ac3..8c46d0d1b 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c @@ -915,11 +915,6 @@ int busybox_main(int argc UNUSED_PARAM, char **argv) "\tTo run external program, use full path (/sbin/ip instead of ip).\n" ) "\n" -#if ENABLE_GLOBBING - "\tSupport for native Windows wildcards is enabled. In some\n" - "\tcases this may result in wildcards being processed twice.\n" - "\n" -#endif "Currently defined functions:\n" ); col = 0; diff --git a/win32/mingw.c b/win32/mingw.c index 105b7864d..06b22a2ed 100644 --- a/win32/mingw.c +++ b/win32/mingw.c @@ -10,7 +10,23 @@ #if defined(__MINGW64_VERSION_MAJOR) #if ENABLE_GLOBBING -int _dowildcard = -1; +extern int _setargv(void); +int _setargv(void) +{ + extern int _dowildcard; + char *glob; + + _dowildcard = -1; + glob = getenv("BB_GLOBBING"); + if (glob) { + if (strcmp(glob, "0") == 0) + _dowildcard = 0; + } + else { + setenv("BB_GLOBBING", "0", TRUE); + } + return 0; +} #else int _dowildcard = 0; #endif -- cgit v1.2.3-55-g6feb