diff options
Diffstat (limited to 'src/basic/util.c')
-rw-r--r-- | src/basic/util.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/basic/util.c b/src/basic/util.c index d2ebb4516..f00bf30be 100644 --- a/src/basic/util.c +++ b/src/basic/util.c @@ -23,6 +23,7 @@ //#include "def.h" //#include "device-nodes.h" #include "dirent-util.h" +//#include "env-util.h" #include "fd-util.h" #include "fileio.h" //#include "format-util.h" @@ -48,7 +49,9 @@ int saved_argc = 0; char **saved_argv = NULL; +#if 0 /// UNNEEDED by elogind static int saved_in_initrd = -1; +#endif // 0 size_t page_size(void) { static thread_local size_t pgsz = 0; @@ -131,10 +134,10 @@ int prot_from_flags(int flags) { return -EINVAL; } } -#endif // 0 bool in_initrd(void) { struct statfs s; + int r; if (saved_in_initrd >= 0) return saved_in_initrd; @@ -149,14 +152,20 @@ bool in_initrd(void) { * emptying when transititioning to the main systemd. */ - saved_in_initrd = access("/etc/initrd-release", F_OK) >= 0 && - statfs("/", &s) >= 0 && - is_temporary_fs(&s); + r = getenv_bool_secure("SYSTEMD_IN_INITRD"); + if (r < 0 && r != -ENXIO) + log_debug_errno(r, "Failed to parse $SYSTEMD_IN_INITRD, ignoring: %m"); + + if (r >= 0) + saved_in_initrd = r > 0; + else + saved_in_initrd = access("/etc/initrd-release", F_OK) >= 0 && + statfs("/", &s) >= 0 && + is_temporary_fs(&s); return saved_in_initrd; } -#if 0 /// UNNEEDED by elogind void in_initrd_force(bool value) { saved_in_initrd = value; } |