#define DEBUG_INIT
*/
-#include "busybox.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include "busybox.h"
+#define bb_need_full_version
+#define BB_DECLARE_EXTERN
+#include "messages.c"
#ifdef BB_SYSLOGD
# include <sys/syslog.h>
#endif
-#define bb_need_full_version
-#define BB_DECLARE_EXTERN
-#include "messages.c"
/* From <linux/vt.h> */
struct vt_stat {
#define INIT_SCRIPT "/etc/init.d/rcS" /* Default sysinit script. */
#endif
+#define MAXENV 16 /* Number of env. vars */
+//static const int MAXENV = 16; /* Number of env. vars */
static const int LOG = 0x1;
static const int CONSOLE = 0x2;
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;
#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];
+ j++;
+ }
+
if ((pid = fork()) == 0) {
/* Clean up */
ioctl(0, TIOCNOTTY, 0);
* specifies.
*/
#ifdef DEBUG_INIT
- pid_t shell_pgid = getpid();
message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
- command, shell_pgid, terminal);
+ command, getpid(), terminal);
#endif
write(fileno(stdout), press_enter, sizeof(press_enter) - 1);
getc(stdin);
#ifdef DEBUG_INIT
/* Log the process name and args */
message(LOG, "Starting pid %d, console %s: '%s'\r\n",
- shell_pgid, terminal, command);
+ getpid(), terminal, command);
#endif
/* See if any special /bin/sh requiring characters are present */