mirror of
https://github.com/systemd/systemd.git
synced 2024-11-07 01:27:11 +03:00
Merge pull request #6721 from yuwata/mount-vfs
systemd-mount: allow to specify an arbitrary string for arg_mount_what when vfs is used
This commit is contained in:
commit
f4b0b3f188
@ -552,6 +552,32 @@ bool fstype_is_network(const char *fstype) {
|
||||
return nulstr_contains(table, fstype);
|
||||
}
|
||||
|
||||
bool fstype_is_api_vfs(const char *fstype) {
|
||||
static const char table[] =
|
||||
"autofs\0"
|
||||
"bpf\0"
|
||||
"cgroup\0"
|
||||
"cgroup2\0"
|
||||
"configfs\0"
|
||||
"cpuset\0"
|
||||
"debugfs\0"
|
||||
"devpts\0"
|
||||
"devtmpfs\0"
|
||||
"efivarfs\0"
|
||||
"hugetlbfs\0"
|
||||
"mqueue\0"
|
||||
"proc\0"
|
||||
"pstore\0"
|
||||
"ramfs\0"
|
||||
"securityfs\0"
|
||||
"sysfs\0"
|
||||
"tmpfs\0"
|
||||
"tracefs\0"
|
||||
;
|
||||
|
||||
return nulstr_contains(table, fstype);
|
||||
}
|
||||
|
||||
int repeat_unmount(const char *path, int flags) {
|
||||
bool done = false;
|
||||
|
||||
|
@ -44,6 +44,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, endmntent);
|
||||
#define _cleanup_endmntent_ _cleanup_(endmntentp)
|
||||
|
||||
bool fstype_is_network(const char *fstype);
|
||||
bool fstype_is_api_vfs(const char *fstype);
|
||||
|
||||
union file_handle_union {
|
||||
struct file_handle handle;
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "fstab-util.h"
|
||||
#include "mount-util.h"
|
||||
#include "pager.h"
|
||||
#include "parse-util.h"
|
||||
#include "path-util.h"
|
||||
@ -330,7 +331,12 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (arg_transport == BUS_TRANSPORT_LOCAL) {
|
||||
if (arg_mount_type && (fstype_is_api_vfs(arg_mount_type) || fstype_is_network(arg_mount_type))) {
|
||||
arg_mount_what = strdup(argv[optind]);
|
||||
if (!arg_mount_what)
|
||||
return log_oom();
|
||||
|
||||
} else if (arg_transport == BUS_TRANSPORT_LOCAL) {
|
||||
_cleanup_free_ char *u = NULL, *p = NULL;
|
||||
|
||||
u = fstab_node_to_udev_node(argv[optind]);
|
||||
@ -344,9 +350,8 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
arg_mount_what = canonicalize_file_name(p);
|
||||
if (!arg_mount_what)
|
||||
return log_error_errno(errno, "Failed to canonicalize path: %m");
|
||||
|
||||
} else {
|
||||
arg_mount_what = strdup(argv[optind+1]);
|
||||
arg_mount_what = strdup(argv[optind]);
|
||||
if (!arg_mount_what)
|
||||
return log_oom();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user