mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
#include <unistd.h>
|
|
|
|
#include "env-util.h"
|
|
#include "errno-util.h"
|
|
#include "initrd-util.h"
|
|
#include "log.h"
|
|
|
|
static int saved_in_initrd = -1;
|
|
|
|
bool in_initrd(void) {
|
|
int r;
|
|
|
|
if (saved_in_initrd >= 0)
|
|
return saved_in_initrd;
|
|
|
|
/* If /etc/initrd-release exists, we're in an initrd.
|
|
* This can be overridden by setting SYSTEMD_IN_INITRD=0|1.
|
|
*/
|
|
|
|
r = secure_getenv_bool("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 {
|
|
r = RET_NERRNO(access("/etc/initrd-release", F_OK));
|
|
if (r < 0 && r != -ENOENT)
|
|
log_debug_errno(r, "Failed to check if /etc/initrd-release exists, assuming it does not: %m");
|
|
saved_in_initrd = r >= 0;
|
|
}
|
|
|
|
return saved_in_initrd;
|
|
}
|
|
|
|
void in_initrd_force(bool value) {
|
|
saved_in_initrd = value;
|
|
}
|