init: set stderr to NONBLOCK
*: s/setenv(a,b,1)/xsetenv(a,b)/

function                                             old     new   delta
init_main                                            856     895     +39
message                                              146     144      -2
crond_main                                          1418    1416      -2
run                                                  661     658      -3
zcip_main                                           1409    1403      -6
edit_file                                            910     901      -9
environment                                           20       -     -20

diff --git a/init/init.c b/init/init.c
index e02773c..e00a3b1 100644
--- a/init/init.c
+++ b/init/init.c
@@ -77,14 +77,6 @@
 #endif
 };
 
-static const char *const environment[] = {
-	"HOME=/",
-	bb_PATH_root_path,
-	"SHELL=/bin/sh",
-	"USER=root",
-	NULL
-};
-
 /* Function prototypes */
 static void halt_reboot_pwoff(int sig) NORETURN;
 
@@ -118,15 +110,16 @@
 {
 	static int log_fd = -1;
 	va_list arguments;
-	int l;
+	unsigned l;
 	char msg[128];
 
 	msg[0] = '\r';
 	va_start(arguments, fmt);
-	vsnprintf(msg + 1, sizeof(msg) - 2, fmt, arguments);
+	l = vsnprintf(msg + 1, sizeof(msg) - 2, fmt, arguments);
+	if (l > sizeof(msg) - 2)
+		l = sizeof(msg) - 2;
+	msg[l] = '\0';
 	va_end(arguments);
-	msg[sizeof(msg) - 2] = '\0';
-	l = strlen(msg);
 
 	if (ENABLE_FEATURE_INIT_SYSLOG) {
 		/* Log the message to syslogd */
@@ -213,6 +206,8 @@
 		/* Make sure fd 0,1,2 are not closed
 		 * (so that they won't be used by future opens) */
 		bb_sanitize_stdio();
+		/* Make sure init can't be blocked by writing to stderr */
+		fcntl(STDERR_FILENO, F_SETFL, fcntl(STDERR_FILENO, F_GETFL) | O_NONBLOCK);
 	}
 
 	s = getenv("TERM");
@@ -825,15 +820,15 @@
 	set_sane_term();
 	xchdir("/");
 	setsid();
-	{
-		const char *const *e;
-		/* Make sure environs is set to something sane */
-		for (e = environment; *e; e++)
-			putenv((char *) *e);
-	}
+
+	/* Make sure environs is set to something sane */
+	putenv((char *) "HOME=/");
+	putenv((char *) bb_PATH_root_path);
+	putenv((char *) "SHELL=/bin/sh");
+	putenv((char *) "USER=root"); /* needed? why? */
 
 	if (argv[1])
-		setenv("RUNLEVEL", argv[1], 1);
+		xsetenv("RUNLEVEL", argv[1]);
 
 	/* Hello world */
 	message(MAYBE_CONSOLE | L_LOG, "init started: %s", bb_banner);