basic: create new basic/initrd-util.[ch] for initrd-related functions
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.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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',
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
@@ -21,71 +20,6 @@
|
||||
|
||||
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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user