ash: in standalone mode, search in $PATH if /proc/self/exe doesn't exist

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2011-12-20 06:10:35 +01:00
parent 3365e9f3cc
commit 83f103b30e

View File

@ -7471,9 +7471,7 @@ shellexec(char **argv, const char *path, int idx)
int e;
char **envp;
int exerrno;
#if ENABLE_FEATURE_SH_STANDALONE
int applet_no = -1;
#endif
int applet_no = -1; /* used only by FEATURE_SH_STANDALONE */
clearredir(/*drop:*/ 1);
envp = listvars(VEXPORT, VUNSET, /*end:*/ NULL);
@ -7483,8 +7481,16 @@ shellexec(char **argv, const char *path, int idx)
#endif
) {
tryexec(IF_FEATURE_SH_STANDALONE(applet_no,) argv[0], argv, envp);
if (applet_no >= 0) {
/* We tried execing ourself, but it didn't work.
* Maybe /proc/self/exe doesn't exist?
* Try $PATH search.
*/
goto try_PATH;
}
e = errno;
} else {
try_PATH:
e = ENOENT;
while ((cmdname = path_advance(&path, argv[0])) != NULL) {
if (--idx < 0 && pathopt == NULL) {