Skip to content

Commit cb98cdc

Browse files
malattiaLinus Torvalds
authored andcommitted
[PATCH] uml: search from uml_net in a more reasonable PATH
Append /usr/lib/uml to the existing PATH environment variable to let execvp() search uml_net in FHS compliant locations. Signed-off-by: Mattia Dongili <[email protected]> Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]> Acked-by: Jeff Dike <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent b15fb6b commit cb98cdc

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

arch/um/os-Linux/main.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,34 @@ static void last_ditch_exit(int sig)
7474
exit(1);
7575
}
7676

77+
#define UML_LIB_PATH ":/usr/lib/uml"
78+
79+
static void setup_env_path(void)
80+
{
81+
char *new_path = NULL;
82+
char *old_path = NULL;
83+
int path_len = 0;
84+
85+
old_path = getenv("PATH");
86+
/* if no PATH variable is set or it has an empty value
87+
* just use the default + /usr/lib/uml
88+
*/
89+
if (!old_path || (path_len = strlen(old_path)) == 0) {
90+
putenv("PATH=:/bin:/usr/bin/" UML_LIB_PATH);
91+
return;
92+
}
93+
94+
/* append /usr/lib/uml to the existing path */
95+
path_len += strlen("PATH=" UML_LIB_PATH) + 1;
96+
new_path = malloc(path_len);
97+
if (!new_path) {
98+
perror("coudn't malloc to set a new PATH");
99+
return;
100+
}
101+
snprintf(new_path, path_len, "PATH=%s" UML_LIB_PATH, old_path);
102+
putenv(new_path);
103+
}
104+
77105
extern int uml_exitcode;
78106

79107
extern void scan_elf_aux( char **envp);
@@ -114,6 +142,8 @@ int main(int argc, char **argv, char **envp)
114142

115143
set_stklim();
116144

145+
setup_env_path();
146+
117147
new_argv = malloc((argc + 1) * sizeof(char *));
118148
if(new_argv == NULL){
119149
perror("Mallocing argv");

0 commit comments

Comments
 (0)