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
diff --git a/init.c b/init.c
index 1332a10..4c05c38 100644
--- a/init.c
+++ b/init.c
@@ -134,6 +134,7 @@
#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 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 @@
#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);
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 @@
#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 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 @@
#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);