Add in some (theoretical) uClinux support.  Some init cleanups
diff --git a/init/init.c b/init/init.c
index b6eaa46..1a5056c 100644
--- a/init/init.c
+++ b/init/init.c
@@ -75,6 +75,12 @@
 };
 
 
+#if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__) 
+  #include <sys/reboot.h>
+  #define init_reboot(magic) reboot(magic)
+#else
+  #define init_reboot(magic) reboot(0xfee1dead, 672274793, magic)
+#endif
 
 #ifndef RB_HALT_SYSTEM
 static const int RB_HALT_SYSTEM = 0xcdef0123;
@@ -84,13 +90,6 @@
 static const int RB_AUTOBOOT = 0x01234567;
 #endif
 
-#if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__) 
-  #include <sys/reboot.h>
-  #define init_reboot(magic) reboot(magic)
-#else
-  #define init_reboot(magic) reboot(0xfee1dead, 672274793, magic)
-#endif
-
 #ifndef _PATH_STDPATH
 #define _PATH_STDPATH	"/usr/bin:/bin:/usr/sbin:/sbin"
 #endif
@@ -218,7 +217,7 @@
 			device = CONSOLE;
 		} else if ((log_fd = device_open(log, O_RDWR|O_NDELAY)) < 0) {
 			log_fd = -2;
-			fprintf(stderr, "Bummer, can't write to log on %s!\r\n", log);
+			fprintf(stderr, "Bummer, can't write to log on %s!\n", log);
 			log = NULL;
 			device = CONSOLE;
 		}
@@ -382,7 +381,7 @@
 			if (strcmp( termType, "TERM=linux" ) == 0)
 				safe_strncpy(termType, "TERM=vt102", sizeof(termType));
 			message(LOG | CONSOLE,
-					"serial console detected.  Disabling virtual terminals.\r\n");
+					"serial console detected.  Disabling virtual terminals.\n");
 		}
 		close(fd);
 	}
@@ -395,7 +394,7 @@
 	/* Fix up argv[0] to be certain we claim to be init */
 	len = strlen(argv[0]);
 	memset(argv[0], 0, len);
-	strncpy(argv[0], new_argv0, len);
+	safe_strncpy(argv[0], new_argv0, len + 1);
 
 	/* Wipe argv[1]-argv[N] so they don't clutter the ps listing */
 	len = 1;
@@ -425,7 +424,7 @@
 	char *environment[MAXENV+1] = {
 		termType,
 		"HOME=/",
-		"PATH=/usr/bin:/bin:/usr/sbin:/sbin",
+		"PATH=" _PATH_STDPATH,
 		"SHELL=" SHELL,
 		"USER=root",
 		NULL
@@ -444,7 +443,12 @@
 		}
 	}
 
-	if ((pid = fork()) == 0) {
+#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__)
+	if ((pid = fork()) == 0) 
+#else
+	if ((pid = vfork()) == 0) 
+#endif
+	{
 		/* Clean up */
 		ioctl(0, TIOCNOTTY, 0);
 		close(0);
@@ -465,7 +469,7 @@
 						terminal);
 				exit(1);
 			}
-			message(LOG | CONSOLE, "Bummer, can't open %s\r\n", terminal);
+			message(LOG | CONSOLE, "Bummer, can't open %s\n", terminal);
 			exit(1);
 		}
 		dup2(fd, 0);
@@ -480,13 +484,16 @@
 			cmd[0] = SHELL;
 			cmd[1] = "-c";
 			strcpy(buf, "exec ");
-			strncat(buf, command, sizeof(buf) - strlen(buf) - 1);
+			safe_strncpy(buf + sizeof("exec "), command, 
+					sizeof(buf) - sizeof("exec "));
 			cmd[2] = buf;
 			cmd[3] = NULL;
 		} else {
 			/* Convert command (char*) into cmd (char**, one word per string) */
-			for (tmpCmd = command, i = 0;
-					(tmpCmd = strsep(&command, " \t")) != NULL;) {
+			safe_strncpy(buf, command, sizeof(buf));
+			s = buf;
+			for (tmpCmd = buf, i = 0;
+					(tmpCmd = strsep(&s, " \t")) != NULL;) {
 				if (*tmpCmd != '\0') {
 					cmd[i] = tmpCmd;
 					tmpCmd++;
@@ -533,7 +540,7 @@
 			 * specifies.
 			 */
 #ifdef DEBUG_INIT
-			message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
+			message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\n",
 					cmd[0], getpid(), terminal);
 #endif
 			write(fileno(stdout), press_enter, sizeof(press_enter) - 1);
@@ -542,7 +549,7 @@
 
 #ifdef DEBUG_INIT
 		/* Log the process name and args */
-		message(LOG, "Starting pid %d, console %s: '%s'\r\n",
+		message(LOG, "Starting pid %d, console %s: '%s'\n",
 				getpid(), terminal, command);
 #endif
 
@@ -592,6 +599,7 @@
 	if (check_free_memory() > 1000)
 		return;
 
+#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__)
 	if (stat("/etc/fstab", &statBuf) == 0) {
 		/* swapon -a requires /proc typically */
 		waitfor("mount proc /proc -t proc", console, FALSE);
@@ -602,10 +610,11 @@
 	} else
 		goto goodnight;
 	return;
+#endif
 
   goodnight:
 	message(CONSOLE,
-			"Sorry, your computer does not have enough memory.\r\n");
+			"Sorry, your computer does not have enough memory.\n");
 	loop_forever();
 }
 
@@ -627,22 +636,29 @@
 static void shutdown_system(void)
 {
 
-	/* first disable our SIGHUP signal */
-	signal(SIGHUP, SIG_DFL);
+	/* first disable all our signals */
+	sigemptyset(&block_signals);
+	sigaddset(&block_signals, SIGHUP);
+	sigaddset(&block_signals, SIGCHLD);
+	sigaddset(&block_signals, SIGUSR1);
+	sigaddset(&block_signals, SIGUSR2);
+	sigaddset(&block_signals, SIGINT);
+	sigaddset(&block_signals, SIGTERM);
+	sigprocmask(SIG_BLOCK, &block_signals, NULL);
 
 	/* Allow Ctrl-Alt-Del to reboot system. */
 	init_reboot(RB_ENABLE_CAD);
 
-	message(CONSOLE|LOG, "\r\nThe system is going down NOW !!\r\n");
+	message(CONSOLE|LOG, "\nThe system is going down NOW !!\n");
 	sync();
 
 	/* Send signals to every process _except_ pid 1 */
-	message(CONSOLE|LOG, "Sending SIGTERM to all processes.\r\n");
+	message(CONSOLE|LOG, "Sending SIGTERM to all processes.\n");
 	kill(-1, SIGTERM);
 	sleep(1);
 	sync();
 
-	message(CONSOLE|LOG, "Sending SIGKILL to all processes.\r\n");
+	message(CONSOLE|LOG, "Sending SIGKILL to all processes.\n");
 	kill(-1, SIGKILL);
 	sleep(1);
 
@@ -661,7 +677,7 @@
 {
 	shutdown_system();
 	message(CONSOLE|LOG,
-			"The system is halted. Press %s or turn off power\r\n",
+			"The system is halted. Press %s or turn off power\n",
 			(secondConsole == NULL)	/* serial console */
 			? "Reset" : "CTRL-ALT-DEL");
 	sync();
@@ -680,7 +696,7 @@
 static void reboot_signal(int sig)
 {
 	shutdown_system();
-	message(CONSOLE|LOG, "Please stand by while rebooting the system.\r\n");
+	message(CONSOLE|LOG, "Please stand by while rebooting the system.\n");
 	sync();
 
 	/* allow time for last message to reach serial console */
@@ -701,9 +717,7 @@
 static void new_initAction(initActionEnum action, char *process, char *cons)
 {
 	initAction *newAction;
-#ifdef CONFIG_FEATURE_INIT_NORMAL_ORDER
 	initAction *a;
-#endif
 
 	if (*cons == '\0')
 		cons = console;
@@ -723,20 +737,15 @@
 		message(LOG | CONSOLE, "Memory allocation failure\n");
 		loop_forever();
 	}
-#ifdef CONFIG_FEATURE_INIT_NORMAL_ORDER
 	for (a = initActionList; a && a->nextPtr; a = a->nextPtr) ;
 	if (a) {
 		a->nextPtr = newAction;
 	} else {
 		initActionList = newAction;
 	}
-#else
-	newAction->nextPtr = initActionList;
-	initActionList = newAction;
-#endif
-	strncpy(newAction->process, process, 255);
+	safe_strncpy(newAction->process, process, 255);
 	newAction->action = action;
-	strncpy(newAction->console, cons, 255);
+	safe_strncpy(newAction->console, cons, 255);
 	newAction->pid = 0;
 //    message(LOG|CONSOLE, "process='%s' action='%d' console='%s'\n",
 //      newAction->process, newAction->action, newAction->console);
@@ -782,16 +791,11 @@
 #endif
 		/* Reboot on Ctrl-Alt-Del */
 		new_initAction(CTRLALTDEL, "/sbin/reboot", console);
-#ifdef CONFIG_FEATURE_INIT_NORMAL_ORDER
 		/* Umount all filesystems on halt/reboot */
 		new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
+#if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__)
 		/* Swapoff on halt/reboot */
 		new_initAction(SHUTDOWN, "/sbin/swapoff -a", console);
-#else
-		/* Swapoff on halt/reboot */
-		new_initAction(SHUTDOWN, "/sbin/swapoff -a", console);
-		/* Umount all filesystems on halt/reboot */
-		new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
 #endif
 		/* Askfirst shell on tty1 */
 		new_initAction(ASKFIRST, LOGIN_SHELL, console);
@@ -916,13 +920,14 @@
 	/* Figure out what kernel this is running */
 	kernelVersion = get_kernel_revision();
 
-	/* Figure out where the default console should be */
-	console_init();
-
 	/* Close whatever files are open, and reset the console. */
 	close(0);
 	close(1);
 	close(2);
+
+	/* Figure out where the default console should be */
+	console_init();
+
 	set_term(0);
 	chdir("/");
 	setsid();
@@ -937,14 +942,14 @@
 			CONSOLE|
 #endif
 			LOG,
-			"init started:  %s\r\n", full_version);
+			"init started:  %s\n", full_version);
 #else
 	message(
 #if ! defined CONFIG_FEATURE_EXTRA_QUIET
 			CONSOLE|
 #endif
 			LOG,
-			"init(%d) started:  %s\r\n", getpid(), full_version);
+			"init(%d) started:  %s\n", getpid(), full_version);
 #endif