mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 08:56:15 +09:00
Looking for the ESP node is useful to shortcut things but if we're told that the node is not referenced in fstab that doesn't necessarily mean that ESP is not mounted via fstab. Indeed the check is not reliable in all cases. Firstly because it assumes that udev already set the symlinks up. This is not the case for initrd-less boots. Secondly the devname of the ESP partition can be wrongly constructed by the dissect code. For example, the approach which consists in appending "p<partnum>" suffix to construct the partition devname from the disk devname doesn't work for DM devices. Hence this patch makes the logic more defensive and do not mount neither ESP nor XBOOTLDR automatically if any path in paths that starts with /efi or /boot exists.
59 lines
1.8 KiB
C
59 lines
1.8 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
|
|
#include "macro.h"
|
|
|
|
bool fstab_enabled_full(int enabled);
|
|
static inline bool fstab_enabled(void) {
|
|
return fstab_enabled_full(-1);
|
|
}
|
|
static inline bool fstab_set_enabled(bool enabled) {
|
|
return fstab_enabled_full(enabled);
|
|
}
|
|
|
|
bool fstab_is_extrinsic(const char *mount, const char *opts);
|
|
int fstab_has_fstype(const char *fstype);
|
|
|
|
int fstab_is_mount_point_full(const char *where, const char *path);
|
|
static inline int fstab_is_mount_point(const char *where) {
|
|
return fstab_is_mount_point_full(where, NULL);
|
|
}
|
|
static inline int fstab_has_node(const char *path) {
|
|
return fstab_is_mount_point_full(NULL, path);
|
|
}
|
|
|
|
int fstab_has_mount_point_prefix_strv(char **prefixes);
|
|
|
|
int fstab_filter_options(
|
|
const char *opts,
|
|
const char *names,
|
|
const char **ret_namefound,
|
|
char **ret_value,
|
|
char ***ret_values,
|
|
char **ret_filtered);
|
|
static inline bool fstab_test_option(const char *opts, const char *names) {
|
|
return fstab_filter_options(opts, names, NULL, NULL, NULL, NULL);
|
|
}
|
|
static inline bool fstab_test_yes_no_option(const char *opts, const char *yes_no) {
|
|
const char *opt_found;
|
|
|
|
/* If first name given is last, return 1.
|
|
* If second name given is last or neither is found, return 0. */
|
|
|
|
assert_se(fstab_filter_options(opts, yes_no, &opt_found, NULL, NULL, NULL) >= 0);
|
|
|
|
return opt_found == yes_no;
|
|
}
|
|
int fstab_find_pri(const char *opts, int *ret);
|
|
|
|
char *fstab_node_to_udev_node(const char *p);
|
|
|
|
static inline const char* fstab_path(void) {
|
|
return secure_getenv("SYSTEMD_FSTAB") ?: "/etc/fstab";
|
|
}
|
|
|
|
bool fstab_is_bind(const char *options, const char *fstype);
|