diff options
author | Ron Yorston <rmy@pobox.com> | 2020-08-13 13:56:17 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2020-08-13 14:58:01 +0100 |
commit | 6059723900f2af1fbd394c457d1feae342e344f6 (patch) | |
tree | 146c10c821977a8af0942cc930d3a4550cf4a624 /debianutils | |
parent | 7d639339e0c46311f8873d560e6f168e71473cd9 (diff) | |
download | busybox-w32-6059723900f2af1fbd394c457d1feae342e344f6.tar.gz busybox-w32-6059723900f2af1fbd394c457d1feae342e344f6.tar.bz2 busybox-w32-6059723900f2af1fbd394c457d1feae342e344f6.zip |
win32: handle Unix-style absolute paths for executables
As noted in commit 548ec7045 (win32: interpret absolute paths as
relative to %SYSTEMDRIVE%) a path starting with a '/' in the Unix
world is treated as relative to the current drive by Windows.
To avoid ambiguity that commit considered certain such paths to
be relative to %SYSTEMDRIVE%. Extend this to paths representing
executables.
Add the functions need_system_drive() and auto_add_system_drive()
to detect the need for a system drive prefix and to add it if
necessary. Use these functions in:
- the 'which' applet
- the find_executable() function
- tab-completion code
- PATH look-up, shellexec(), describe_command() and find_command() in ash
- parse_interpreter() and mingw_spawn_1()
With these changes executable paths starting with a slash are
handled consistently, whatever the current drive.
Diffstat (limited to 'debianutils')
-rw-r--r-- | debianutils/which.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/debianutils/which.c b/debianutils/which.c index 1f8c1a538..c8e99acda 100644 --- a/debianutils/which.c +++ b/debianutils/which.c | |||
@@ -71,6 +71,7 @@ int which_main(int argc UNUSED_PARAM, char **argv) | |||
71 | if (strchr(*argv, '/')) { | 71 | if (strchr(*argv, '/')) { |
72 | #else | 72 | #else |
73 | if (has_path(*argv)) { | 73 | if (has_path(*argv)) { |
74 | *argv = auto_add_system_drive(*argv); | ||
74 | if ((p=auto_win32_extension(*argv)) != NULL) { | 75 | if ((p=auto_win32_extension(*argv)) != NULL) { |
75 | missing = 0; | 76 | missing = 0; |
76 | puts(bs_to_slash(p)); | 77 | puts(bs_to_slash(p)); |