summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorEric Andersen2001-02-20 18:01:50 +0000
committerEric Andersen2001-02-20 18:01:50 +0000
commit477aedd77f5e4abeefbf686e21f395686aca16d3 (patch)
tree11a80d2a43d8fb3b2e5b0a02b84b051ae24f88e4 /init
parent5165fbed639916e0fde15a827241b21981be7934 (diff)
downloadbusybox-477aedd77f5e4abeefbf686e21f395686aca16d3.zip
busybox-477aedd77f5e4abeefbf686e21f395686aca16d3.tar.gz
Commit a patch from Erik Gustavsson <cyrano@algonet.se>, to allow
environment variables set from the kernel command line to be inherited bu application programs. Slightly changed to special case handling of TERM, so that it has sane defaults when on a serial console. -Erik
Diffstat (limited to 'init')
-rw-r--r--init/init.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/init/init.c b/init/init.c
index 1332a10..4c05c38 100644
--- a/init/init.c
+++ b/init/init.c
@@ -134,6 +134,7 @@ static _syscall2(int, bdflush, int, func, int, data);
#define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */
#endif
+static const int MAXENV = 16; /* Number of env. vars */
static const int LOG = 0x1;
static const int CONSOLE = 0x2;
@@ -394,7 +395,8 @@ static void console_init()
static pid_t run(char *command, char *terminal, int get_enter)
{
- int i, fd;
+ int i=0, j=0;
+ int fd;
pid_t pid;
char *tmpCmd;
char *cmd[255], *cmdpath;
@@ -406,15 +408,24 @@ static pid_t run(char *command, char *terminal, int get_enter)
#endif
"\nPlease press Enter to activate this console. ";
- char *environment[] = {
+ char *environment[MAXENV+1] = {
"HOME=/",
"PATH=/usr/bin:/bin:/usr/sbin:/sbin",
"SHELL=/bin/sh",
termType,
- "USER=root",
- 0
+ "USER=root"
};
+ while (environment[i]) i++;
+ while ((environ[j]) && (i < MAXENV)) {
+ if (strncmp(environ[j], "TERM=", 5))
+ environment[i++] = environ[j];
+ else {
+ snprintf(termType, sizeof(termType) - 1, environ[j]);
+ }
+ j++;
+ }
+
if ((pid = fork()) == 0) {
/* Clean up */
ioctl(0, TIOCNOTTY, 0);