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.) --- win32/mingw.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'win32') 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