diff options
Diffstat (limited to 'win32/process.c')
-rw-r--r-- | win32/process.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/win32/process.c b/win32/process.c index cd164e0ed..a050ec11d 100644 --- a/win32/process.c +++ b/win32/process.c | |||
@@ -350,6 +350,7 @@ mingw_spawn_1(int mode, const char *cmd, char *const *argv, char *const *envp) | |||
350 | { | 350 | { |
351 | char *prog; | 351 | char *prog; |
352 | const char *path; | 352 | const char *path; |
353 | intptr_t ret; | ||
353 | 354 | ||
354 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE | 355 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE |
355 | if (find_applet_by_name(cmd) >= 0) | 356 | if (find_applet_by_name(cmd) >= 0) |
@@ -357,12 +358,22 @@ mingw_spawn_1(int mode, const char *cmd, char *const *argv, char *const *envp) | |||
357 | else | 358 | else |
358 | #endif | 359 | #endif |
359 | if (has_path(cmd)) { | 360 | if (has_path(cmd)) { |
361 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE | ||
362 | const char *oldcmd = cmd; | ||
363 | #endif | ||
360 | cmd = auto_add_system_drive(cmd); | 364 | cmd = auto_add_system_drive(cmd); |
361 | path = auto_win32_extension(cmd); | 365 | path = auto_win32_extension(cmd); |
362 | return mingw_spawn_interpreter(mode, path ? path : cmd, argv, envp, 0); | 366 | ret = mingw_spawn_interpreter(mode, path ? path : cmd, argv, envp, 0); |
367 | #if ENABLE_FEATURE_PREFER_APPLETS || ENABLE_FEATURE_SH_STANDALONE | ||
368 | if (ret == -1 && cmd != oldcmd && unix_path(oldcmd) && | ||
369 | find_applet_by_name(bb_basename(oldcmd))) { | ||
370 | return mingw_spawn_applet(mode, argv, envp); | ||
371 | } | ||
372 | #endif | ||
373 | return ret; | ||
363 | } | 374 | } |
364 | else if ((prog=find_first_executable(cmd)) != NULL) { | 375 | else if ((prog=find_first_executable(cmd)) != NULL) { |
365 | intptr_t ret = mingw_spawn_interpreter(mode, prog, argv, envp, 0); | 376 | ret = mingw_spawn_interpreter(mode, prog, argv, envp, 0); |
366 | free(prog); | 377 | free(prog); |
367 | return ret; | 378 | return ret; |
368 | } | 379 | } |