proc-cmdline: add runlevel to target mapping
This commit is contained in:
parent
534e8f89d6
commit
c573dcfeb1
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue