]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic: create new basic/initrd-util.[ch] for initrd-related functions
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 5 Nov 2022 16:29:43 +0000 (17:29 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 8 Nov 2022 12:41:13 +0000 (13:41 +0100)
I changed imports of util.h to initrd-util.h, or added an import of
initrd-util.h, to keep compilation working. It turns out that many files didn't
import util.h directly.

When viewing the patch, don't be confused by git rename detection logic:
a new .c file is added and two functions moved into it.

32 files changed:
src/basic/initrd-util.c [new file with mode: 0644]
src/basic/initrd-util.h [new file with mode: 0644]
src/basic/meson.build
src/basic/proc-cmdline.c
src/basic/unit-file.c
src/basic/util.c
src/basic/util.h
src/boot/bless-boot-generator.c
src/core/bpf-util.c
src/core/import-creds.c
src/core/main.c
src/core/manager-serialize.c
src/core/manager.c
src/core/mount.c
src/core/selinux-setup.c
src/debug-generator/debug-generator.c
src/fstab-generator/fstab-generator.c
src/gpt-auto-generator/gpt-auto-generator.c
src/hibernate-resume/hibernate-resume-generator.c
src/hibernate-resume/hibernate-resume.c
src/journal/journald-server.c
src/network/networkd-manager.c
src/partition/repart.c
src/shared/condition.c
src/shared/fstab-util.c
src/shared/generator.c
src/shared/killall.c
src/shared/switch-root.c
src/shutdown/shutdown.c
src/sysext/sysext.c
src/test/test-proc-cmdline.c
src/test/test-unit-file.c

diff --git a/src/basic/initrd-util.c b/src/basic/initrd-util.c
new file mode 100644 (file)
index 0000000..2b6809a
--- /dev/null
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <unistd.h>
+
+#include "env-util.h"
+#include "initrd-util.h"
+#include "parse-util.h"
+#include "stat-util.h"
+#include "string-util.h"
+
+static int saved_in_initrd = -1;
+
+bool in_initrd(void) {
+        int r;
+        const char *e;
+        bool lenient = false;
+
+        if (saved_in_initrd >= 0)
+                return saved_in_initrd;
+
+        /* We have two checks here:
+         *
+         * 1. the flag file /etc/initrd-release must exist
+         * 2. the root file system must be a memory file system
+         *
+         * The second check is extra paranoia, since misdetecting an
+         * initrd can have bad consequences due the initrd
+         * emptying when transititioning to the main systemd.
+         *
+         * If env var $SYSTEMD_IN_INITRD is not set or set to "auto",
+         * both checks are used. If it's set to "lenient", only check
+         * 1 is used. If set to a boolean value, then the boolean
+         * value is returned.
+         */
+
+        e = secure_getenv("SYSTEMD_IN_INITRD");
+        if (e) {
+                if (streq(e, "lenient"))
+                        lenient = true;
+                else if (!streq(e, "auto")) {
+                        r = parse_boolean(e);
+                        if (r >= 0) {
+                                saved_in_initrd = r > 0;
+                                return saved_in_initrd;
+                        }
+                        log_debug_errno(r, "Failed to parse $SYSTEMD_IN_INITRD, ignoring: %m");
+                }
+        }
+
+        if (!lenient) {
+                r = path_is_temporary_fs("/");
+                if (r < 0)
+                        log_debug_errno(r, "Couldn't determine if / is a temporary file system: %m");
+
+                saved_in_initrd = r > 0;
+        }
+
+        r = access("/etc/initrd-release", F_OK);
+        if (r >= 0) {
+                if (saved_in_initrd == 0)
+                        log_debug("/etc/initrd-release exists, but it's not an initrd.");
+                else
+                        saved_in_initrd = 1;
+        } else {
+                if (errno != ENOENT)
+                        log_debug_errno(errno, "Failed to test if /etc/initrd-release exists: %m");
+                saved_in_initrd = 0;
+        }
+
+        return saved_in_initrd;
+}
+
+void in_initrd_force(bool value) {
+        saved_in_initrd = value;
+}
diff --git a/src/basic/initrd-util.h b/src/basic/initrd-util.h
new file mode 100644 (file)
index 0000000..173093c
--- /dev/null
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include <stdbool.h>
+
+bool in_initrd(void);
+void in_initrd_force(bool value);
index bfe52d5879bfa5eefd51ea228ae2da9ca5090082..c1d970b6a9f706f307355b7f2168f227c2a5b792 100644 (file)
@@ -80,6 +80,8 @@ basic_sources = files(
         'hostname-util.h',
         'in-addr-util.c',
         'in-addr-util.h',
+        'initrd-util.c',
+        'initrd-util.h',
         'inotify-util.c',
         'inotify-util.h',
         'io-util.c',
index 410b8a3eb5de67e7d1defd0a5377bf8441520102..eea70d86069fed6dce46c2010145d74aa04e7981 100644 (file)
@@ -7,13 +7,13 @@
 #include "efivars.h"
 #include "extract-word.h"
 #include "fileio.h"
+#include "initrd-util.h"
 #include "macro.h"
 #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"
 
 int proc_cmdline(char **ret) {
index c81c69db305b5840b526fa1d73bec2ab63cb83fa..1334365c2fa9109eb21ddc3b28ab6d7d0f1dd8b7 100644 (file)
@@ -6,6 +6,7 @@
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "fs-util.h"
+#include "initrd-util.h"
 #include "macro.h"
 #include "path-lookup.h"
 #include "set.h"
index e1f090ebb9465f5df980685c949119f617e28a17..c47ea4584b9b9db41023560328007806ba90604f 100644 (file)
@@ -7,7 +7,6 @@
 #include "alloc-util.h"
 #include "build.h"
 #include "env-file.h"
-#include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "hostname-util.h"
 
 int saved_argc = 0;
 char **saved_argv = NULL;
-static int saved_in_initrd = -1;
-
-bool in_initrd(void) {
-        int r;
-        const char *e;
-        bool lenient = false;
-
-        if (saved_in_initrd >= 0)
-                return saved_in_initrd;
-
-        /* We have two checks here:
-         *
-         * 1. the flag file /etc/initrd-release must exist
-         * 2. the root file system must be a memory file system
-         *
-         * The second check is extra paranoia, since misdetecting an
-         * initrd can have bad consequences due the initrd
-         * emptying when transititioning to the main systemd.
-         *
-         * If env var $SYSTEMD_IN_INITRD is not set or set to "auto",
-         * both checks are used. If it's set to "lenient", only check
-         * 1 is used. If set to a boolean value, then the boolean
-         * value is returned.
-         */
-
-        e = secure_getenv("SYSTEMD_IN_INITRD");
-        if (e) {
-                if (streq(e, "lenient"))
-                        lenient = true;
-                else if (!streq(e, "auto")) {
-                        r = parse_boolean(e);
-                        if (r >= 0) {
-                                saved_in_initrd = r > 0;
-                                return saved_in_initrd;
-                        }
-                        log_debug_errno(r, "Failed to parse $SYSTEMD_IN_INITRD, ignoring: %m");
-                }
-        }
-
-        if (!lenient) {
-                r = path_is_temporary_fs("/");
-                if (r < 0)
-                        log_debug_errno(r, "Couldn't determine if / is a temporary file system: %m");
-
-                saved_in_initrd = r > 0;
-        }
-
-        r = access("/etc/initrd-release", F_OK);
-        if (r >= 0) {
-                if (saved_in_initrd == 0)
-                        log_debug("/etc/initrd-release exists, but it's not an initrd.");
-                else
-                        saved_in_initrd = 1;
-        } else {
-                if (errno != ENOENT)
-                        log_debug_errno(errno, "Failed to test if /etc/initrd-release exists: %m");
-                saved_in_initrd = 0;
-        }
-
-        return saved_in_initrd;
-}
-
-void in_initrd_force(bool value) {
-        saved_in_initrd = value;
-}
 
 int container_get_leader(const char *machine, pid_t *pid) {
         _cleanup_free_ char *s = NULL, *class = NULL;
index 0fcc1882f6818a985a83655bde11d64154acbbcf..347e4fe4b03dc63c338fabd35d69b3ead40a3dc1 100644 (file)
@@ -19,9 +19,6 @@ static inline void save_argc_argv(int argc, char **argv) {
         saved_argv = argv;
 }
 
-bool in_initrd(void);
-void in_initrd_force(bool value);
-
 /* Note: log2(0) == log2(1) == 0 here and below. */
 
 #define CONST_LOG2ULL(x) ((x) > 1 ? (unsigned) __builtin_clzll(x) ^ 63U : 0)
index 6adef5b3dcb19922bd8b430e90c6573e5b6bc0e3..5120b9622e1fb2d2543a768ac82241d0cdb4ed56 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "efi-loader.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "mkdir.h"
 #include "special.h"
index 84170da0a80c34ca48ddf1a54b1a598d11485489..6fe229e32dbcab3fcd5c393bcd84f954f17ad604 100644 (file)
@@ -3,6 +3,7 @@
 #include "bpf-dlopen.h"
 #include "bpf-util.h"
 #include "cgroup-util.h"
+#include "initrd-util.h"
 #include "log.h"
 
 bool cgroup_bpf_supported(void) {
index 4685e43f475b964db00622cb286fdd62026ae92b..1f2017ee5a522132bc877da50f63ce9b7aa5beb0 100644 (file)
@@ -9,6 +9,7 @@
 #include "format-util.h"
 #include "fs-util.h"
 #include "hexdecoct.h"
+#include "initrd-util.h"
 #include "import-creds.h"
 #include "io-util.h"
 #include "mkdir-label.h"
index 14a4f81452349c86ddc87da83e6c016ae94657c3..672345368cce6036ae5894e89eb9cbfbd014fd8c 100644 (file)
@@ -52,6 +52,7 @@
 #include "hostname-setup.h"
 #include "ima-setup.h"
 #include "import-creds.h"
+#include "initrd-util.h"
 #include "killall.h"
 #include "kmod-setup.h"
 #include "limits-util.h"
@@ -92,7 +93,6 @@
 #include "time-util.h"
 #include "umask-util.h"
 #include "user-util.h"
-#include "util.h"
 #include "virt.h"
 #include "watchdog.h"
 
index 27cb0925aeb77cacb48111a073d352fd6d5d5fed..dd16d17afa829a7c980b857dce77b76f2ad5804f 100644 (file)
@@ -6,6 +6,7 @@
 #include "fd-util.h"
 #include "fileio.h"
 #include "format-util.h"
+#include "initrd-util.h"
 #include "macro.h"
 #include "manager-serialize.h"
 #include "manager.h"
index a59afafb589fed0b19dbf8be2f2b3dac7f2dfca1..1473425e4e510e4c023ecaf7dac4087d034c9be3 100644 (file)
@@ -48,6 +48,7 @@
 #include "fileio.h"
 #include "generator-setup.h"
 #include "hashmap.h"
+#include "initrd-util.h"
 #include "inotify-util.h"
 #include "install.h"
 #include "io-util.h"
index 5e8a6ead61995d5656de41376e6f7bed3ce67b57..be46e566896e8c2923e543a05bb23a7cb2f7587c 100644 (file)
@@ -14,6 +14,7 @@
 #include "exit-status.h"
 #include "format-util.h"
 #include "fstab-util.h"
+#include "initrd-util.h"
 #include "libmount-util.h"
 #include "log.h"
 #include "manager.h"
index 3f873baa9101c726d56ffb45d845c708b8193b12..153322442c7eaf00a289849aa9c8ec3d2601d94c 100644 (file)
@@ -8,13 +8,13 @@
 #include <selinux/selinux.h>
 #endif
 
+#include "initrd-util.h"
 #include "log.h"
 #include "macro.h"
 #include "selinux-setup.h"
 #include "selinux-util.h"
 #include "string-util.h"
 #include "time-util.h"
-#include "util.h"
 
 #if HAVE_SELINUX
 _printf_(2,3)
index cf638fcc56667d6f4a530b1935c2c5d7ab0dd90c..1fe2b5681085447f7a2c203a98dac4706ddf13d8 100644 (file)
@@ -5,6 +5,7 @@
 #include "alloc-util.h"
 #include "dropin.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "mkdir-label.h"
 #include "parse-util.h"
 #include "path-util.h"
index e76de45a0faaa6e2b360010188d159ff4e1684cd..872e01f58f7102976b3a184c06b99534e758515d 100644 (file)
@@ -13,6 +13,7 @@
 #include "fstab-util.h"
 #include "generator.h"
 #include "in-addr-util.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "mkdir.h"
@@ -29,7 +30,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 #include "virt.h"
 #include "volatile-util.h"
 
index 0fb53bb9ea21e81824eff1fde160c46d9c5d7ba0..f939b2e8c24a0de4e18e6ca6eab454a57b39b8f1 100644 (file)
@@ -23,6 +23,7 @@
 #include "fstab-util.h"
 #include "generator.h"
 #include "gpt.h"
+#include "initrd-util.h"
 #include "mkdir.h"
 #include "mountpoint-util.h"
 #include "parse-util.h"
@@ -34,7 +35,6 @@
 #include "string-util.h"
 #include "strv.h"
 #include "unit-name.h"
-#include "util.h"
 #include "virt.h"
 
 static const char *arg_dest = NULL;
index 82c2a564932b917f32a8b1c8af3b9102ece4dd0b..be52c21d00dfbe5adaddb26ed70de215bae00f9c 100644 (file)
@@ -8,6 +8,7 @@
 #include "dropin.h"
 #include "fstab-util.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "mkdir-label.h"
index 1c7d9179d8eb8378d5d226a415e9c21f790c7065..9a9df5d22f6a64678ca7a62fe47c2d32bdd3c533 100644 (file)
@@ -7,8 +7,8 @@
 #include "alloc-util.h"
 #include "devnum-util.h"
 #include "fileio.h"
+#include "initrd-util.h"
 #include "log.h"
-#include "util.h"
 
 int main(int argc, char *argv[]) {
         struct stat st;
index 71d7a59bdac6cee80962bf45d77cc0cffaabfcec..c02d73bdc2d2de769ce534557c047cbe60f042e8 100644 (file)
@@ -27,6 +27,7 @@
 #include "hashmap.h"
 #include "hostname-util.h"
 #include "id128-util.h"
+#include "initrd-util.h"
 #include "io-util.h"
 #include "journal-authenticate.h"
 #include "journal-internal.h"
index 684d635d363b4584a738a6b466e56b47d624ecc7..2db8bb6074fc047e7f415b551a2b94b1adfb3948 100644 (file)
@@ -26,6 +26,7 @@
 #include "fileio.h"
 #include "firewall-util.h"
 #include "fs-util.h"
+#include "initrd-util.h"
 #include "local-addresses.h"
 #include "netlink-util.h"
 #include "network-internal.h"
index 8e3cfece89d98da62a6798401734eab5c94950eb..44060c9413ff1dbaa2d0d14a87c1d5e417c6a068 100644 (file)
@@ -40,6 +40,7 @@
 #include "hexdecoct.h"
 #include "hmac.h"
 #include "id128-util.h"
+#include "initrd-util.h"
 #include "io-util.h"
 #include "json.h"
 #include "list.h"
index a23d6a3e45c8e448f0155c72c6191553855d482a..f404d99878b023ba6b07e838ff619789ecef7249 100644 (file)
@@ -34,6 +34,7 @@
 #include "fs-util.h"
 #include "glob-util.h"
 #include "hostname-util.h"
+#include "initrd-util.h"
 #include "ima-util.h"
 #include "limits-util.h"
 #include "list.h"
index f683f05981596b0c9c627a62338ebdc7c2b7b9ba..3cbc6be248b3bab2f83cae32dd130820107dd4cc 100644 (file)
@@ -7,6 +7,7 @@
 #include "alloc-util.h"
 #include "device-nodes.h"
 #include "fstab-util.h"
+#include "initrd-util.h"
 #include "macro.h"
 #include "mount-util.h"
 #include "nulstr-util.h"
index 5d019f4f4e045594c854f71cc82ffaf1f329f224..7eed3b76c17b00d66443aac263e0faaf4dd99d30 100644 (file)
@@ -11,6 +11,7 @@
 #include "fileio.h"
 #include "fstab-util.h"
 #include "generator.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "macro.h"
 #include "mkdir-label.h"
@@ -21,7 +22,6 @@
 #include "string-util.h"
 #include "time-util.h"
 #include "unit-name.h"
-#include "util.h"
 
 int generator_open_unit_file(
                 const char *dir,
index 35180870a86b561118d909d37778eb557356a9b9..133b0e28d68ee151a474c557488be335158db268 100644 (file)
@@ -13,6 +13,7 @@
 #include "dirent-util.h"
 #include "fd-util.h"
 #include "format-util.h"
+#include "initrd-util.h"
 #include "killall.h"
 #include "parse-util.h"
 #include "process-util.h"
@@ -20,7 +21,6 @@
 #include "stdio-util.h"
 #include "string-util.h"
 #include "terminal-util.h"
-#include "util.h"
 
 static bool ignore_proc(pid_t pid, bool warn_rootfs) {
         _cleanup_fclose_ FILE *f = NULL;
index 1a444841fa0870a0774548cb9f422cb69d49f0bc..0b93312bbf31f4866e09049485b54aecd0274d28 100644 (file)
@@ -11,6 +11,7 @@
 #include "base-filesystem.h"
 #include "chase-symlinks.h"
 #include "fd-util.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "missing_syscall.h"
 #include "mkdir-label.h"
@@ -23,7 +24,6 @@
 #include "strv.h"
 #include "switch-root.h"
 #include "user-util.h"
-#include "util.h"
 
 int switch_root(const char *new_root,
                 const char *old_root_after, /* path below the new root, where to place the old root after the transition */
index dcee0f900616d2fb98bdc99258528c2a198ebab7..045ff9f41840bdd88283743b5d0e8b5e7a60f3b6 100644 (file)
@@ -24,6 +24,7 @@
 #include "exec-util.h"
 #include "fd-util.h"
 #include "fileio.h"
+#include "initrd-util.h"
 #include "killall.h"
 #include "log.h"
 #include "parse-util.h"
@@ -36,7 +37,6 @@
 #include "sysctl-util.h"
 #include "terminal-util.h"
 #include "umount.h"
-#include "util.h"
 #include "virt.h"
 #include "watchdog.h"
 
index 0875099d5fcc805ddacd48de3c146ed65c868eb5..839e2f92b825d6dcc1e63cde1759f318b66ce3a4 100644 (file)
@@ -20,6 +20,7 @@
 #include "format-table.h"
 #include "fs-util.h"
 #include "hashmap.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "missing_magic.h"
index 1f43bb3eb0dde95507d82662bb1f47471db950ae..1d54066ae6600f2127907a131383df1b67a7b953 100644 (file)
@@ -3,13 +3,13 @@
 #include "alloc-util.h"
 #include "env-util.h"
 #include "errno-util.h"
+#include "initrd-util.h"
 #include "log.h"
 #include "macro.h"
 #include "proc-cmdline.h"
 #include "special.h"
 #include "string-util.h"
 #include "tests.h"
-#include "util.h"
 
 static int obj;
 
index dffa2822e6a44e7ddb29068a69c0e65ebe83d168..27a73d61a0b8821937de71e6cf3cbc20872b0971 100644 (file)
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "initrd-util.h"
 #include "path-lookup.h"
 #include "set.h"
 #include "special.h"