]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util-lib: move runlevel_to_target() to shared/unit-file
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 1 Aug 2019 12:25:14 +0000 (14:25 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 16 Sep 2019 16:08:00 +0000 (18:08 +0200)
It if of course related to /proc/cmdline parsing, but is higher-level
functionality built on top of it. It should be in shared/ because it
is something to be used by pid1 and related utilities, not something for
level-level libraries.

src/basic/proc-cmdline.c
src/basic/proc-cmdline.h
src/debug-generator/debug-generator.c
src/shared/unit-file.c
src/shared/unit-file.h
src/system-update-generator/system-update-generator.c
src/test/test-proc-cmdline.c
src/test/test-unit-file.c

index 09169cf96346f8563db98e9282aa9d819b9b9853..5d29774e09e2deb0a55398f45babaed0dcafaf81 100644 (file)
@@ -317,47 +317,3 @@ int shall_restore_state(void) {
 
         return r > 0 ? ret : true;
 }
-
-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,
-        NULL
-};
-
-static const char * const rlmap_initrd[] = {
-        "emergency", SPECIAL_EMERGENCY_TARGET,
-        "rescue",    SPECIAL_RESCUE_TARGET,
-        NULL
-};
-
-const char* runlevel_to_target(const char *word) {
-        const char * const *rlmap_ptr;
-        size_t i;
-
-        if (!word)
-                return NULL;
-
-        if (in_initrd()) {
-                word = startswith(word, "rd.");
-                if (!word)
-                        return NULL;
-        }
-
-        rlmap_ptr = in_initrd() ? rlmap_initrd : rlmap;
-
-        for (i = 0; rlmap_ptr[i]; i += 2)
-                if (streq(word, rlmap_ptr[i]))
-                        return rlmap_ptr[i+1];
-
-        return NULL;
-}
index ff04379fbd3fdefa1f480c72be68f7f13f45a22e..429e7ca4a459ae830dc3e8ff19c05c29f2f8adc3 100644 (file)
@@ -28,7 +28,6 @@ char *proc_cmdline_key_startswith(const char *s, const char *prefix);
 bool proc_cmdline_key_streq(const char *x, const char *y);
 
 int shall_restore_state(void);
-const char* runlevel_to_target(const char *rl);
 
 /* A little helper call, to be used in proc_cmdline_parse_t callbacks */
 static inline bool proc_cmdline_value_missing(const char *key, const char *value) {
index e73dde32b883b9423ac0abd550a9638680cd201f..bc8714c4c7f5cbae20cca42f15a141c26c60284b 100644 (file)
@@ -12,6 +12,7 @@
 #include "special.h"
 #include "string-util.h"
 #include "strv.h"
+#include "unit-file.h"
 #include "unit-name.h"
 
 static const char *arg_dest = NULL;
index 4a5f23e6c1bcbb0e76ffe9a508d661022fc98189..9bcd5dc92e560ccddb8e4382b650242d15d7e0d7 100644 (file)
@@ -6,6 +6,7 @@
 #include "macro.h"
 #include "path-lookup.h"
 #include "set.h"
+#include "special.h"
 #include "stat-util.h"
 #include "string-util.h"
 #include "strv.h"
@@ -511,3 +512,47 @@ int unit_file_find_fragment(
         // FIXME: if instance, consider any unit names with different template name
         return 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,
+        NULL
+};
+
+static const char * const rlmap_initrd[] = {
+        "emergency", SPECIAL_EMERGENCY_TARGET,
+        "rescue",    SPECIAL_RESCUE_TARGET,
+        NULL
+};
+
+const char* runlevel_to_target(const char *word) {
+        const char * const *rlmap_ptr;
+        size_t i;
+
+        if (!word)
+                return NULL;
+
+        if (in_initrd()) {
+                word = startswith(word, "rd.");
+                if (!word)
+                        return NULL;
+        }
+
+        rlmap_ptr = in_initrd() ? rlmap_initrd : rlmap;
+
+        for (i = 0; rlmap_ptr[i]; i += 2)
+                if (streq(word, rlmap_ptr[i]))
+                        return rlmap_ptr[i+1];
+
+        return NULL;
+}
index 54cc7876fef15b807d5194d1c295ea836ced9a0f..98ba677f3f641bae584ad697db96f4345de5be00 100644 (file)
@@ -54,3 +54,5 @@ int unit_file_find_fragment(
                 const char *unit_name,
                 const char **ret_fragment_path,
                 Set **names);
+
+const char* runlevel_to_target(const char *rl);
index 6ec4986c10ce70b21345f4afb5b325fdecaebfdc..666affca190b06fad66c6e16db7688817d0aa2a5 100644 (file)
@@ -9,6 +9,7 @@
 #include "proc-cmdline.h"
 #include "special.h"
 #include "string-util.h"
+#include "unit-file.h"
 #include "util.h"
 
 /*
index 6d25a6919ed257fb981e8007a50a9a54b6dce61f..884fb36010b6ce9c0721b4aa5c63a2d13bba3c39 100644 (file)
@@ -212,24 +212,6 @@ static void test_proc_cmdline_key_startswith(void) {
         assert_se(!proc_cmdline_key_startswith("foo-bar", "foo_xx"));
 }
 
-static void test_runlevel_to_target(void) {
-        log_info("/* %s */", __func__);
-
-        in_initrd_force(false);
-        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("rd.unknown-runlevel"), NULL));
-        assert_se(streq_ptr(runlevel_to_target("3"), SPECIAL_MULTI_USER_TARGET));
-        assert_se(streq_ptr(runlevel_to_target("rd.rescue"), NULL));
-
-        in_initrd_force(true);
-        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("rd.unknown-runlevel"), NULL));
-        assert_se(streq_ptr(runlevel_to_target("3"), NULL));
-        assert_se(streq_ptr(runlevel_to_target("rd.rescue"), SPECIAL_RESCUE_TARGET));
-}
-
 int main(void) {
         log_parse_environment();
         log_open();
@@ -244,7 +226,6 @@ int main(void) {
         test_proc_cmdline_get_key();
         test_proc_cmdline_get_bool();
         test_proc_cmdline_get_key_many();
-        test_runlevel_to_target();
 
         return 0;
 }
index 8bc5bf60387aeb5d089d1ed124e57663ec6d0463..f0186b078f0cfac6af0a9123a93ca8cfefb74b15 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "path-lookup.h"
 #include "set.h"
+#include "special.h"
 #include "strv.h"
 #include "tests.h"
 #include "unit-file.h"
@@ -75,11 +76,30 @@ static void test_unit_file_build_name_map(char **ids) {
         }
 }
 
+static void test_runlevel_to_target(void) {
+        log_info("/* %s */", __func__);
+
+        in_initrd_force(false);
+        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("rd.unknown-runlevel"), NULL));
+        assert_se(streq_ptr(runlevel_to_target("3"), SPECIAL_MULTI_USER_TARGET));
+        assert_se(streq_ptr(runlevel_to_target("rd.rescue"), NULL));
+
+        in_initrd_force(true);
+        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("rd.unknown-runlevel"), NULL));
+        assert_se(streq_ptr(runlevel_to_target("3"), NULL));
+        assert_se(streq_ptr(runlevel_to_target("rd.rescue"), SPECIAL_RESCUE_TARGET));
+}
+
 int main(int argc, char **argv) {
         test_setup_logging(LOG_DEBUG);
 
         test_unit_validate_alias_symlink_and_warn();
         test_unit_file_build_name_map(strv_skip(argv, 1));
+        test_runlevel_to_target();
 
         return 0;
 }