proc-cmdline: add runlevel to target mapping

This commit is contained in:
Evgeny Vereshchagin 2015-11-03 14:09:03 +03:00
parent 534e8f89d6
commit c573dcfeb1
3 changed files with 38 additions and 0 deletions

View file

@ -26,6 +26,7 @@
#include "parse-util.h"
#include "proc-cmdline.h"
#include "process-util.h"
#include "special.h"
#include "string-util.h"
#include "util.h"
#include "virt.h"
@ -143,3 +144,31 @@ int shall_restore_state(void) {
return parse_boolean(value) != 0;
}
static const char * const rlmap[] = {
"emergency", SPECIAL_EMERGENCY_TARGET,
"-b", SPECIAL_EMERGENCY_TARGET,
"rescue", SPECIAL_RESCUE_TARGET,
"single", SPECIAL_RESCUE_TARGET,
"-s", SPECIAL_RESCUE_TARGET,
"s", SPECIAL_RESCUE_TARGET,
"S", SPECIAL_RESCUE_TARGET,
"1", SPECIAL_RESCUE_TARGET,
"2", SPECIAL_MULTI_USER_TARGET,
"3", SPECIAL_MULTI_USER_TARGET,
"4", SPECIAL_MULTI_USER_TARGET,
"5", SPECIAL_GRAPHICAL_TARGET,
};
const char* runlevel_to_target(const char *word) {
size_t i;
if (!word)
return NULL;
for (i = 0; i < ELEMENTSOF(rlmap); i += 2)
if (streq(word, rlmap[i]))
return rlmap[i+1];
return NULL;
}

View file

@ -26,3 +26,4 @@ int parse_proc_cmdline(int (*parse_word)(const char *key, const char *value));
int get_proc_cmdline_key(const char *parameter, char **value);
int shall_restore_state(void);
const char* runlevel_to_target(const char *rl);

View file

@ -48,6 +48,7 @@
#include "process-util.h"
#include "rm-rf.h"
#include "signal-util.h"
#include "special.h"
#include "stat-util.h"
#include "string-util.h"
#include "strv.h"
@ -1638,6 +1639,12 @@ cleanup:
assert_se(rmdir(t) >= 0);
}
static void test_runlevel_to_target(void) {
assert_se(streq_ptr(runlevel_to_target(NULL), NULL));
assert_se(streq_ptr(runlevel_to_target("unknown-runlevel"), NULL));
assert_se(streq_ptr(runlevel_to_target("3"), SPECIAL_MULTI_USER_TARGET));
}
int main(int argc, char *argv[]) {
log_parse_environment();
log_open();
@ -1718,6 +1725,7 @@ int main(int argc, char *argv[]) {
test_tempfn();
test_strcmp_ptr();
test_fgetxattrat_fake();
test_runlevel_to_target();
return 0;
}