- no obj-code changes. Fix indentation, use existing defines.

This commit is contained in:
Bernhard Reutner-Fischer 2008-07-21 11:16:39 +00:00
parent 1101d1c980
commit ad2fa65fc0

View File

@ -43,16 +43,6 @@
#define SHUTDOWN 0x40 #define SHUTDOWN 0x40
#define RESTART 0x80 #define RESTART 0x80
/*
#define STR_SYSINIT "\x01"
#define STR_RESPAWN "\x02"
#define STR_ASKFIRST "\x04"
#define STR_WAIT "\x08"
#define STR_ONCE "\x10"
#define STR_CTRLALTDEL "\x20"
#define STR_SHUTDOWN "\x40"
#define STR_RESTART "\x80"
*/
/* Set up a linked list of init_actions, to be read from inittab */ /* Set up 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;
@ -142,7 +132,7 @@ static void message(int where, const char *fmt, ...)
if (ENABLE_FEATURE_INIT_SYSLOG) { if (ENABLE_FEATURE_INIT_SYSLOG) {
/* Log the message to syslogd */ /* Log the message to syslogd */
if (where & L_LOG) { if (where & L_LOG) {
/* don't out "\r" */ /* don't print out "\r" */
openlog(applet_name, 0, LOG_DAEMON); openlog(applet_name, 0, LOG_DAEMON);
syslog(LOG_INFO, "init: %s", msg + 1); syslog(LOG_INFO, "init: %s", msg + 1);
closelog(); closelog();
@ -156,7 +146,7 @@ static void message(int where, const char *fmt, ...)
* It's mine, all mine! Muhahahaha! */ * It's mine, all mine! Muhahahaha! */
if (log_fd < 0) { if (log_fd < 0) {
if (!log_console) { if (!log_console) {
log_fd = 2; log_fd = STDERR_FILENO;
} else { } else {
log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY); log_fd = device_open(log_console, O_WRONLY | O_NONBLOCK | O_NOCTTY);
if (log_fd < 0) { if (log_fd < 0) {
@ -169,7 +159,7 @@ static void message(int where, const char *fmt, ...)
} }
if (where & L_LOG) { if (where & L_LOG) {
full_write(log_fd, msg, l); full_write(log_fd, msg, l);
if (log_fd == 2) if (log_fd == STDERR_FILENO)
return; /* don't print dup messages */ return; /* don't print dup messages */
} }
} }
@ -210,13 +200,14 @@ static void console_init(void)
char *s; char *s;
s = getenv("CONSOLE"); s = getenv("CONSOLE");
if (!s) s = getenv("console"); if (!s)
s = getenv("console");
if (s) { if (s) {
int fd = open(s, O_RDWR | O_NONBLOCK | O_NOCTTY); int fd = open(s, O_RDWR | O_NONBLOCK | O_NOCTTY);
if (fd >= 0) { if (fd >= 0) {
dup2(fd, 0); dup2(fd, STDIN_FILENO);
dup2(fd, 1); dup2(fd, STDOUT_FILENO);
xmove_fd(fd, 2); xmove_fd(fd, STDERR_FILENO);
} }
messageD(L_LOG, "console='%s'", s); messageD(L_LOG, "console='%s'", s);
} else { } else {
@ -255,7 +246,7 @@ static void set_sane_term(void)
tty.c_cc[VSTOP] = 19; /* C-s */ tty.c_cc[VSTOP] = 19; /* C-s */
tty.c_cc[VSUSP] = 26; /* C-z */ tty.c_cc[VSUSP] = 26; /* C-z */
/* use line dicipline 0 */ /* use line discipline 0 */
tty.c_line = 0; tty.c_line = 0;
/* Make it be sane */ /* Make it be sane */
@ -282,7 +273,7 @@ static void open_stdio_to_tty(const char* tty_name, int exit_on_failure)
/* empty tty_name means "use init's tty", else... */ /* empty tty_name means "use init's tty", else... */
if (tty_name[0]) { if (tty_name[0]) {
int fd; int fd;
close(0); close(STDIN_FILENO);
/* fd can be only < 0 or 0: */ /* fd can be only < 0 or 0: */
fd = device_open(tty_name, O_RDWR); fd = device_open(tty_name, O_RDWR);
if (fd) { if (fd) {
@ -292,12 +283,12 @@ static void open_stdio_to_tty(const char* tty_name, int exit_on_failure)
_exit(EXIT_FAILURE); _exit(EXIT_FAILURE);
if (ENABLE_DEBUG_INIT) if (ENABLE_DEBUG_INIT)
_exit(2); _exit(2);
/* NB: we don't reach this if we were called after vfork. /* NB: we don't reach this if we were called after vfork.
* Thus halt_reboot_pwoff() itself need not be vfork-safe. */ * Thus halt_reboot_pwoff() itself need not be vfork-safe. */
halt_reboot_pwoff(SIGUSR1); /* halt the system */ halt_reboot_pwoff(SIGUSR1); /* halt the system */
} }
dup2(0, 1); dup2(STDIN_FILENO, STDOUT_FILENO);
dup2(0, 2); dup2(STDIN_FILENO, STDERR_FILENO);
} }
set_sane_term(); set_sane_term();
} }
@ -346,8 +337,7 @@ static void init_exec(const char *command)
ioctl(STDIN_FILENO, TIOCSCTTY, 0 /*only try, don't steal*/); ioctl(STDIN_FILENO, TIOCSCTTY, 0 /*only try, don't steal*/);
} }
BB_EXECVP(cmd[0] + dash, cmd); BB_EXECVP(cmd[0] + dash, cmd);
message(L_LOG | L_CONSOLE, "Cannot run '%s': %s", message(L_LOG | L_CONSOLE, "Cannot run '%s': %s", cmd[0], strerror(errno));
cmd[0], strerror(errno));
/* returns if execvp fails */ /* returns if execvp fails */
} }
@ -434,7 +424,6 @@ static pid_t run(const struct init_action *a)
waitfor(pid); waitfor(pid);
_exit(EXIT_SUCCESS); _exit(EXIT_SUCCESS);
} }
/* Child - fall though to actually execute things */ /* Child - fall though to actually execute things */
} }
#endif #endif
@ -640,8 +629,7 @@ static void new_init_action(uint8_t action_type, const char *command, const char
/* don't enter action if it's already in the list, /* don't enter action if it's already in the list,
* but do overwrite existing actions */ * but do overwrite existing actions */
if ((strcmp(a->command, command) == 0) if ((strcmp(a->command, command) == 0)
&& (strcmp(a->terminal, cons) == 0) && (strcmp(a->terminal, cons) == 0)) {
) {
a->action_type = action_type; a->action_type = action_type;
return; return;
} }
@ -687,95 +675,6 @@ static void delete_init_action(struct init_action *action)
*/ */
static void parse_inittab(void) static void parse_inittab(void)
{ {
#if 0
FILE *file;
char buf[COMMAND_SIZE];
if (ENABLE_FEATURE_USE_INITTAB)
file = fopen(INITTAB, "r");
else
file = NULL;
/* No inittab file -- set up some default behavior */
if (file == NULL) {
/* Reboot on Ctrl-Alt-Del */
new_init_action(CTRLALTDEL, "reboot", "");
/* Umount all filesystems on halt/reboot */
new_init_action(SHUTDOWN, "umount -a -r", "");
/* Swapoff on halt/reboot */
if (ENABLE_SWAPONOFF)
new_init_action(SHUTDOWN, "swapoff -a", "");
/* Prepare to restart init when a QUIT is received */
new_init_action(RESTART, "init", "");
/* Askfirst shell on tty1-4 */
new_init_action(ASKFIRST, bb_default_login_shell, "");
new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, bb_default_login_shell, VC_3);
new_init_action(ASKFIRST, bb_default_login_shell, VC_4);
/* sysinit */
new_init_action(SYSINIT, INIT_SCRIPT, "");
return;
}
while (fgets(buf, COMMAND_SIZE, file) != NULL) {
static const char actions[] =
STR_SYSINIT "sysinit\0"
STR_RESPAWN "respawn\0"
STR_ASKFIRST "askfirst\0"
STR_WAIT "wait\0"
STR_ONCE "once\0"
STR_CTRLALTDEL "ctrlaltdel\0"
STR_SHUTDOWN "shutdown\0"
STR_RESTART "restart\0"
;
char tmpConsole[CONSOLE_NAME_SIZE];
char *id, *runlev, *action, *command;
const char *a;
/* Skip leading spaces */
id = skip_whitespace(buf);
/* Trim the trailing '\n' */
*strchrnul(id, '\n') = '\0';
/* Skip the line if it is a comment */
if (*id == '#' || *id == '\0')
continue;
/* Line is: "id:runlevel_ignored:action:command" */
runlev = strchr(id, ':');
if (runlev == NULL /*|| runlev[1] == '\0' - not needed */)
goto bad_entry;
action = strchr(runlev + 1, ':');
if (action == NULL /*|| action[1] == '\0' - not needed */)
goto bad_entry;
command = strchr(action + 1, ':');
if (command == NULL || command[1] == '\0')
goto bad_entry;
*command = '\0'; /* action => ":action\0" now */
for (a = actions; a[0]; a += strlen(a) + 1) {
if (strcmp(a + 1, action + 1) == 0) {
*runlev = '\0';
if (*id != '\0') {
if (strncmp(id, "/dev/", 5) == 0)
id += 5;
strcpy(tmpConsole, "/dev/");
safe_strncpy(tmpConsole + 5, id,
sizeof(tmpConsole) - 5);
id = tmpConsole;
}
new_init_action((uint8_t)a[0], command + 1, id);
goto next_line;
}
}
*command = ':';
/* Choke on an unknown action */
bad_entry:
message(L_LOG | L_CONSOLE, "Bad inittab entry: %s", id);
next_line: ;
}
fclose(file);
#else
char *token[4]; char *token[4];
/* order must correspond to SYSINIT..RESTART constants */ /* order must correspond to SYSINIT..RESTART constants */
static const char actions[] ALIGN1 = static const char actions[] ALIGN1 =
@ -808,7 +707,7 @@ static void parse_inittab(void)
/* optional_tty:ignored_runlevel:action:command /* optional_tty:ignored_runlevel:action:command
* Delims are not to be collapsed and need exactly 4 tokens * Delims are not to be collapsed and need exactly 4 tokens
*/ */
while (config_read(parser, token, 4, 0, "#:", PARSE_DONT_TRIM|PARSE_DONT_REDUCE|PARSE_LAST_IS_GREEDY)) { while (config_read(parser, token, 4, 0, "#:", PARSE_DONT_TRIM|PARSE_DONT_REDUCE|PARSE_LAST_IS_GREEDY)) {
int action; int action;
char *tty = token[0]; char *tty = token[0];
@ -828,10 +727,10 @@ static void parse_inittab(void)
free(tty); free(tty);
continue; continue;
bad_entry: bad_entry:
message(L_LOG | L_CONSOLE, "Bad inittab entry at line %d", parser->lineno); message(L_LOG | L_CONSOLE, "Bad inittab entry at line %d",
parser->lineno);
} }
config_close(parser); config_close(parser);
#endif
} }
#if ENABLE_FEATURE_USE_INITTAB #if ENABLE_FEATURE_USE_INITTAB