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
This commit is contained in:
Denis Vlasenko 2008-09-20 16:28:59 +00:00
parent b61dc1c1ce
commit b8d1a4cd5f
4 changed files with 22 additions and 27 deletions

View File

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

View File

@ -187,7 +187,7 @@ int crond_main(int argc UNUSED_PARAM, char **argv)
xchdir(CDir); xchdir(CDir);
//signal(SIGHUP, SIG_IGN); /* ? original crond dies on HUP... */ //signal(SIGHUP, SIG_IGN); /* ? original crond dies on HUP... */
setenv("SHELL", DEFAULT_SHELL, 1); /* once, for all future children */ xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */
crondlog(LVL9 "crond (busybox "BB_VER") started, log level %d", LogLevel); crondlog(LVL9 "crond (busybox "BB_VER") started, log level %d", LogLevel);
SynchronizeDir(); SynchronizeDir();
@ -275,8 +275,8 @@ static void SetEnv(struct passwd *pas)
/* if we want to set user's shell instead: */ /* if we want to set user's shell instead: */
/*safe_setenv(env_var_user, "SHELL", pas->pw_shell, 5);*/ /*safe_setenv(env_var_user, "SHELL", pas->pw_shell, 5);*/
#else #else
setenv("USER", pas->pw_name, 1); xsetenv("USER", pas->pw_name);
setenv("HOME", pas->pw_dir, 1); xsetenv("HOME", pas->pw_dir);
#endif #endif
/* currently, we use constant one: */ /* currently, we use constant one: */
/*setenv("SHELL", DEFAULT_SHELL, 1); - done earlier */ /*setenv("SHELL", DEFAULT_SHELL, 1); - done earlier */

View File

@ -21,9 +21,9 @@
static void change_user(const struct passwd *pas) static void change_user(const struct passwd *pas)
{ {
setenv("USER", pas->pw_name, 1); xsetenv("USER", pas->pw_name);
setenv("HOME", pas->pw_dir, 1); xsetenv("HOME", pas->pw_dir);
setenv("SHELL", DEFAULT_SHELL, 1); xsetenv("SHELL", DEFAULT_SHELL);
/* initgroups, setgid, setuid */ /* initgroups, setgid, setuid */
change_identity(pas); change_identity(pas);

View File

@ -144,7 +144,7 @@ static int run(char *argv[3], struct in_addr *ip)
if (ip) { if (ip) {
addr = inet_ntoa(*ip); addr = inet_ntoa(*ip);
setenv("ip", addr, 1); xsetenv("ip", addr);
fmt -= 3; fmt -= 3;
} }
bb_info_msg(fmt, argv[1], intf, addr); bb_info_msg(fmt, argv[1], intf, addr);
@ -238,7 +238,7 @@ int zcip_main(int argc, char **argv)
intf = argv[0]; intf = argv[0];
script_av[0] = argv[1]; script_av[0] = argv[1];
setenv("interface", intf, 1); xsetenv("interface", intf);
// initialize the interface (modprobe, ifup, etc) // initialize the interface (modprobe, ifup, etc)
script_av[1] = (char*)"init"; script_av[1] = (char*)"init";