init: stop using static data
function old new delta init_action_list 4 - -4 new_init_action 148 142 -6 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-10) Total: -10 bytes text data bss dec hex filename 927839 481 6832 935152 e44f0 busybox_old 927833 481 6824 935138 e44e2 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
baa41c7855
commit
f2539c78d2
40
init/init.c
40
init/init.c
@ -128,6 +128,7 @@
|
|||||||
#define DEBUG_SEGV_HANDLER 0
|
#define DEBUG_SEGV_HANDLER 0
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
#include "common_bufsiz.h"
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@ -203,7 +204,6 @@
|
|||||||
*/
|
*/
|
||||||
#define RESTART 0x80
|
#define RESTART 0x80
|
||||||
|
|
||||||
|
|
||||||
/* A linked list of init_actions, to be read from inittab */
|
/* A linked list of init_actions, to be read from inittab */
|
||||||
struct init_action {
|
struct init_action {
|
||||||
struct init_action *next;
|
struct init_action *next;
|
||||||
@ -213,11 +213,17 @@ struct init_action {
|
|||||||
char command[1];
|
char command[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct init_action *init_action_list = NULL;
|
struct globals {
|
||||||
|
struct init_action *init_action_list;
|
||||||
#if !ENABLE_FEATURE_INIT_SYSLOG
|
#if !ENABLE_FEATURE_INIT_SYSLOG
|
||||||
static const char *log_console = VC_5;
|
const char *log_console;
|
||||||
#endif
|
#endif
|
||||||
|
} FIX_ALIASING;
|
||||||
|
#define G (*(struct globals*)bb_common_bufsiz1)
|
||||||
|
#define INIT_G() do { \
|
||||||
|
setup_common_bufsiz(); \
|
||||||
|
IF_NOT_FEATURE_INIT_SYSLOG(G.log_console = VC_5;) \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
L_LOG = 0x1,
|
L_LOG = 0x1,
|
||||||
@ -265,10 +271,10 @@ static void message(int where, const char *fmt, ...)
|
|||||||
|
|
||||||
if (log_fd < 0) {
|
if (log_fd < 0) {
|
||||||
log_fd = STDERR_FILENO;
|
log_fd = STDERR_FILENO;
|
||||||
if (log_console) {
|
if (G.log_console) {
|
||||||
log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY);
|
log_fd = device_open(G.log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY);
|
||||||
if (log_fd < 0) {
|
if (log_fd < 0) {
|
||||||
bb_error_msg("can't log to %s", log_console);
|
bb_error_msg("can't log to %s", G.log_console);
|
||||||
where = L_CONSOLE;
|
where = L_CONSOLE;
|
||||||
} else {
|
} else {
|
||||||
close_on_exec_on(log_fd);
|
close_on_exec_on(log_fd);
|
||||||
@ -328,7 +334,7 @@ static void console_init(void)
|
|||||||
if (!s || strcmp(s, "linux") == 0)
|
if (!s || strcmp(s, "linux") == 0)
|
||||||
putenv((char*)"TERM=vt102");
|
putenv((char*)"TERM=vt102");
|
||||||
# if !ENABLE_FEATURE_INIT_SYSLOG
|
# if !ENABLE_FEATURE_INIT_SYSLOG
|
||||||
log_console = NULL;
|
G.log_console = NULL;
|
||||||
# endif
|
# endif
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
@ -562,7 +568,7 @@ static struct init_action *mark_terminated(pid_t pid)
|
|||||||
|
|
||||||
if (pid > 0) {
|
if (pid > 0) {
|
||||||
update_utmp_DEAD_PROCESS(pid);
|
update_utmp_DEAD_PROCESS(pid);
|
||||||
for (a = init_action_list; a; a = a->next) {
|
for (a = G.init_action_list; a; a = a->next) {
|
||||||
if (a->pid == pid) {
|
if (a->pid == pid) {
|
||||||
a->pid = 0;
|
a->pid = 0;
|
||||||
return a;
|
return a;
|
||||||
@ -596,7 +602,7 @@ static void run_actions(int action_type)
|
|||||||
{
|
{
|
||||||
struct init_action *a;
|
struct init_action *a;
|
||||||
|
|
||||||
for (a = init_action_list; a; a = a->next) {
|
for (a = G.init_action_list; a; a = a->next) {
|
||||||
if (!(a->action_type & action_type))
|
if (!(a->action_type & action_type))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -630,7 +636,7 @@ static void new_init_action(uint8_t action_type, const char *command, const char
|
|||||||
* To achieve that, if we find a matching entry, we move it
|
* To achieve that, if we find a matching entry, we move it
|
||||||
* to the end.
|
* to the end.
|
||||||
*/
|
*/
|
||||||
nextp = &init_action_list;
|
nextp = &G.init_action_list;
|
||||||
while ((a = *nextp) != NULL) {
|
while ((a = *nextp) != NULL) {
|
||||||
/* Don't enter action if it's already in the list.
|
/* Don't enter action if it's already in the list.
|
||||||
* This prevents losing running RESPAWNs.
|
* This prevents losing running RESPAWNs.
|
||||||
@ -845,7 +851,7 @@ static void exec_restart_action(void)
|
|||||||
{
|
{
|
||||||
struct init_action *a;
|
struct init_action *a;
|
||||||
|
|
||||||
for (a = init_action_list; a; a = a->next) {
|
for (a = G.init_action_list; a; a = a->next) {
|
||||||
if (!(a->action_type & RESTART))
|
if (!(a->action_type & RESTART))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -923,7 +929,7 @@ static void reload_inittab(void)
|
|||||||
message(L_LOG, "reloading /etc/inittab");
|
message(L_LOG, "reloading /etc/inittab");
|
||||||
|
|
||||||
/* Disable old entries */
|
/* Disable old entries */
|
||||||
for (a = init_action_list; a; a = a->next)
|
for (a = G.init_action_list; a; a = a->next)
|
||||||
a->action_type = 0;
|
a->action_type = 0;
|
||||||
|
|
||||||
/* Append new entries, or modify existing entries
|
/* Append new entries, or modify existing entries
|
||||||
@ -936,14 +942,14 @@ static void reload_inittab(void)
|
|||||||
#if ENABLE_FEATURE_KILL_REMOVED
|
#if ENABLE_FEATURE_KILL_REMOVED
|
||||||
/* Kill stale entries */
|
/* Kill stale entries */
|
||||||
/* Be nice and send SIGTERM first */
|
/* Be nice and send SIGTERM first */
|
||||||
for (a = init_action_list; a; a = a->next)
|
for (a = G.init_action_list; a; a = a->next)
|
||||||
if (a->action_type == 0 && a->pid != 0)
|
if (a->action_type == 0 && a->pid != 0)
|
||||||
kill(a->pid, SIGTERM);
|
kill(a->pid, SIGTERM);
|
||||||
if (CONFIG_FEATURE_KILL_DELAY) {
|
if (CONFIG_FEATURE_KILL_DELAY) {
|
||||||
/* NB: parent will wait in NOMMU case */
|
/* NB: parent will wait in NOMMU case */
|
||||||
if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
|
if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
|
||||||
sleep(CONFIG_FEATURE_KILL_DELAY);
|
sleep(CONFIG_FEATURE_KILL_DELAY);
|
||||||
for (a = init_action_list; a; a = a->next)
|
for (a = G.init_action_list; a; a = a->next)
|
||||||
if (a->action_type == 0 && a->pid != 0)
|
if (a->action_type == 0 && a->pid != 0)
|
||||||
kill(a->pid, SIGKILL);
|
kill(a->pid, SIGKILL);
|
||||||
_exit(EXIT_SUCCESS);
|
_exit(EXIT_SUCCESS);
|
||||||
@ -955,7 +961,7 @@ static void reload_inittab(void)
|
|||||||
* We never rerun SYSINIT entries anyway,
|
* We never rerun SYSINIT entries anyway,
|
||||||
* removing them too saves a few bytes
|
* removing them too saves a few bytes
|
||||||
*/
|
*/
|
||||||
nextp = &init_action_list;
|
nextp = &G.init_action_list;
|
||||||
while ((a = *nextp) != NULL) {
|
while ((a = *nextp) != NULL) {
|
||||||
/*
|
/*
|
||||||
* Why pid == 0 check?
|
* Why pid == 0 check?
|
||||||
@ -1046,6 +1052,8 @@ static void sleep_much(void)
|
|||||||
int init_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
int init_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int init_main(int argc UNUSED_PARAM, char **argv)
|
int init_main(int argc UNUSED_PARAM, char **argv)
|
||||||
{
|
{
|
||||||
|
INIT_G();
|
||||||
|
|
||||||
if (argv[1] && strcmp(argv[1], "-q") == 0) {
|
if (argv[1] && strcmp(argv[1], "-q") == 0) {
|
||||||
return kill(1, SIGHUP);
|
return kill(1, SIGHUP);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user