summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-05-21 20:00:58 +0200
committerLennart Poettering <lennart@poettering.net>2012-05-21 20:00:58 +0200
commit8f33b5b8b3e85f9c3b00eb004e601f7a72fa6461 (patch)
treed9166ff2738a5ceeb09beb988652a81eeb1ee83b
parent2660882b52ae1a5d97a2344633a999d88a3cd45b (diff)
util: rework in_initrd() logic
Checking the device major/minor is not a good idea. Let's replace this with an explicit flag file, which we model after /etc/os-release and call /etc/initrd-release.
-rw-r--r--TODO2
-rw-r--r--src/shared/util.c16
2 files changed, 5 insertions, 13 deletions
diff --git a/TODO b/TODO
index b147d3aefe..da8bef6548 100644
--- a/TODO
+++ b/TODO
@@ -53,8 +53,6 @@ Features:
* actually queue the new default unit after switch-root
-* remove old root in switch-root logic
-
* improve !/proc/*/loginuid situation: make /proc/*/loginuid less dependent on CONFIG_AUDIT,
or use the users cgroup information when /proc/*/loginuid is not available.
diff --git a/src/shared/util.c b/src/shared/util.c
index 5acddd3e0f..4b841491aa 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -5654,16 +5654,10 @@ bool is_valid_documentation_url(const char *url) {
}
bool in_initrd(void) {
- static bool checked=false;
- static bool is_in_initrd=false;
-
- if (!checked) {
- struct stat sb;
- if (stat("/", &sb) == 0) {
- is_in_initrd = (sb.st_dev == 1);
- checked = true;
- }
- }
+ static int saved = -1;
+
+ if (saved < 0)
+ saved = access("/etc/initrd-release", F_OK) >= 0;
- return is_in_initrd;
+ return saved;
}