init: fix compile-time error; fix exiting on broken config file
parse_config: cosmetics
This commit is contained in:
parent
02a1c6a7c3
commit
a474b68991
40
init/init.c
40
init/init.c
@ -777,12 +777,10 @@ static void parse_inittab(void)
|
||||
fclose(file);
|
||||
#else
|
||||
char *token[4];
|
||||
static const char actions[] ALIGN1 = {
|
||||
"sysinit\0""respawn\0""askfirst\0""wait\0""once\0"
|
||||
"ctrlaltdel\0""shutdown\0""restart\0"
|
||||
};
|
||||
enum {STR_SYSINIT=0, STR_RESPAWN, STR_ASKFIRST, STR_WAIT, STR_ONCE,
|
||||
STR_CTRLALTDEL, STR_SHUTDOWN, STR_RESTART};
|
||||
/* order must correspond to SYSINIT..RESTART constants */
|
||||
static const char actions[] ALIGN1 =
|
||||
"sysinit\0""respawn\0""askfirst\0""wait\0""once\0"
|
||||
"ctrlaltdel\0""shutdown\0""restart\0";
|
||||
|
||||
parser_t *parser = config_open(INITTAB);
|
||||
/* No inittab file -- set up some default behavior */
|
||||
@ -798,6 +796,7 @@ static void parse_inittab(void)
|
||||
new_init_action(RESTART, "init", "");
|
||||
/* Askfirst shell on tty1-4 */
|
||||
new_init_action(ASKFIRST, bb_default_login_shell, "");
|
||||
//TODO: VC_1 instead of ""? "" is console -> ctty problems -> angry users
|
||||
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);
|
||||
@ -807,28 +806,25 @@ static void parse_inittab(void)
|
||||
return;
|
||||
}
|
||||
/* optional_tty:ignored_runlevel:action:command
|
||||
* i.e. 4 tokens, minimum number of tokens is 2 ("::sysinit:echo foo")
|
||||
* We require tokens not to be collapsed -- need exactly 4 tokens.
|
||||
* Delims are not to be collapsed and need exactly 4 tokens
|
||||
*/
|
||||
while (config_read(parser, token, -4, 2, ":", '#') >= 0) {
|
||||
int action = -1;
|
||||
while (config_read(parser, token, -4, 0, ":", '#') >= 0) {
|
||||
int action;
|
||||
char *tty = token[0];
|
||||
char *action_string = token[2];
|
||||
char *command = token[3];
|
||||
|
||||
if (action_string)
|
||||
action = index_in_strings(actions, action_string);
|
||||
if (action < 0 || !command || !strlen(command))
|
||||
if (!token[3]) /* less than 4 tokens */
|
||||
goto bad_entry;
|
||||
if (tty) {
|
||||
/* turn .*TTY -> /dev/TTY */
|
||||
if (!strncmp(tty, "/dev/", 5))
|
||||
action = index_in_strings(actions, token[2]);
|
||||
if (action < 0 || !token[3][0]) /* token[3]: command */
|
||||
goto bad_entry;
|
||||
/* turn .*TTY -> /dev/TTY */
|
||||
if (tty[0]) {
|
||||
if (strncmp(tty, "/dev/", 5) == 0)
|
||||
tty += 5;
|
||||
tty = concat_path_file("/dev/", tty);
|
||||
} else
|
||||
tty = ""; /* XXX: ugh. */
|
||||
new_init_action (1<<action, command, tty);
|
||||
if (ENABLE_FEATURE_CLEAN_UP)
|
||||
}
|
||||
new_init_action(1 << action, token[3], tty);
|
||||
if (tty[0])
|
||||
free(tty);
|
||||
continue;
|
||||
bad_entry:
|
||||
|
@ -56,16 +56,16 @@ void FAST_FUNC config_close(parser_t *parser)
|
||||
fclose(parser->fp);
|
||||
}
|
||||
|
||||
int FAST_FUNC config_read(parser_t *parser, char **tokens, int ntokens, int mintokens, const char*delims,char comment)
|
||||
int FAST_FUNC config_read(parser_t *parser, char **tokens, int ntokens, int mintokens, const char *delims, char comment)
|
||||
{
|
||||
char *line, *q;
|
||||
int ii, seen;
|
||||
/* do not treat subsequent delimiters as one delimiter */
|
||||
/* do not treat consecutive delimiters as one delimiter */
|
||||
bool noreduce = (ntokens < 0);
|
||||
if (noreduce)
|
||||
ntokens = -ntokens;
|
||||
|
||||
memset(tokens, 0, sizeof(void *) * ntokens);
|
||||
memset(tokens, 0, sizeof(tokens[0]) * ntokens);
|
||||
config_free_data(parser);
|
||||
|
||||
while (1) {
|
||||
|
Loading…
Reference in New Issue
Block a user