A patch from Andreas Neuhaus to be especially careful to not dup
authorEric Andersen <andersen@codepoet.org>
Fri, 16 Mar 2001 01:14:04 +0000 (01:14 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 16 Mar 2001 01:14:04 +0000 (01:14 -0000)
any env variables when spawning child processes.

init.c
init/init.c

diff --git a/init.c b/init.c
index 64c7768d6ac25e3ae7686302a6b92a8b23521e5e..145452ff3ad3a31ef7871356253a071fc99dcc86 100644 (file)
--- a/init.c
+++ b/init.c
@@ -396,11 +396,11 @@ static void console_init()
 
 static pid_t run(char *command, char *terminal, int get_enter)
 {
-       int i=0, j=0;
+       int i, j;
        int fd;
        pid_t pid;
-       char *tmpCmd;
-        char *cmd[255], *cmdpath;
+       char *tmpCmd, *s;
+       char *cmd[255], *cmdpath;
        char buf[255];
        static const char press_enter[] =
 
@@ -410,18 +410,25 @@ static pid_t run(char *command, char *terminal, int get_enter)
 
                "\nPlease press Enter to activate this console. ";
        char *environment[MAXENV+1] = {
+               termType,
                "HOME=/",
                "PATH=/usr/bin:/bin:/usr/sbin:/sbin",
                "SHELL=/bin/sh",
-               termType,
-               "USER=root"
+               "USER=root",
+               NULL
        };
 
-       while (environment[i]) i++;
-       while ((environ[j]) && (i < MAXENV)) {
-               if (strncmp(environ[j], "TERM=", 5))
-                       environment[i++] = environ[j];
-               j++;
+       /* inherit environment to the child, merging our values -andy */
+       for (i=0; environ[i]; i++) {
+               for (j=0; environment[j]; j++) {
+                       s = strchr(environment[j], '=');
+                       if (!strncmp(environ[i], environment[j], s - environment[j]))
+                               break;
+               }
+               if (!environment[j]) {
+                       environment[j++] = environ[i];
+                       environment[j] = NULL;
+               }
        }
 
        if ((pid = fork()) == 0) {
index 64c7768d6ac25e3ae7686302a6b92a8b23521e5e..145452ff3ad3a31ef7871356253a071fc99dcc86 100644 (file)
@@ -396,11 +396,11 @@ static void console_init()
 
 static pid_t run(char *command, char *terminal, int get_enter)
 {
-       int i=0, j=0;
+       int i, j;
        int fd;
        pid_t pid;
-       char *tmpCmd;
-        char *cmd[255], *cmdpath;
+       char *tmpCmd, *s;
+       char *cmd[255], *cmdpath;
        char buf[255];
        static const char press_enter[] =
 
@@ -410,18 +410,25 @@ static pid_t run(char *command, char *terminal, int get_enter)
 
                "\nPlease press Enter to activate this console. ";
        char *environment[MAXENV+1] = {
+               termType,
                "HOME=/",
                "PATH=/usr/bin:/bin:/usr/sbin:/sbin",
                "SHELL=/bin/sh",
-               termType,
-               "USER=root"
+               "USER=root",
+               NULL
        };
 
-       while (environment[i]) i++;
-       while ((environ[j]) && (i < MAXENV)) {
-               if (strncmp(environ[j], "TERM=", 5))
-                       environment[i++] = environ[j];
-               j++;
+       /* inherit environment to the child, merging our values -andy */
+       for (i=0; environ[i]; i++) {
+               for (j=0; environment[j]; j++) {
+                       s = strchr(environment[j], '=');
+                       if (!strncmp(environ[i], environment[j], s - environment[j]))
+                               break;
+               }
+               if (!environment[j]) {
+                       environment[j++] = environ[i];
+                       environment[j] = NULL;
+               }
        }
 
        if ((pid = fork()) == 0) {