From 8f33b5b8b3e85f9c3b00eb004e601f7a72fa6461 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 21 May 2012 20:00:58 +0200 Subject: [PATCH] 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. --- TODO | 2 -- src/shared/util.c | 16 +++++----------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/TODO b/TODO index b147d3ae..da8bef65 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 5acddd3e..4b841491 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; } -- 2.39.5