summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shlibs/mount/src/libmount.h.in2
-rw-r--r--shlibs/mount/src/optmap.c15
-rw-r--r--tests/expected/libmount/optstr-flags2
-rw-r--r--tests/expected/libmount/optstr-split2
-rwxr-xr-xtests/ts/libmount/optstr4
5 files changed, 18 insertions, 7 deletions
diff --git a/shlibs/mount/src/libmount.h.in b/shlibs/mount/src/libmount.h.in
index e168f2845..7d02ddcf0 100644
--- a/shlibs/mount/src/libmount.h.in
+++ b/shlibs/mount/src/libmount.h.in
@@ -73,6 +73,7 @@ struct libmnt_optmap
*/
#define MNT_INVERT (1 << 1) /* invert the mountflag */
#define MNT_NOMTAB (1 << 2) /* skip in the mtab option string */
+#define MNT_PREFIX (1 << 3) /* prefix used for some options (e.g. "x-foo") */
/**
* libmnt_fs:
@@ -438,6 +439,7 @@ extern int mnt_context_set_syscall_status(struct libmnt_context *cxt, int status
#define MNT_MS_NOFAIL (1 << 10)
#define MNT_MS_UHELPER (1 << 11)
#define MNT_MS_HELPER (1 << 12)
+#define MNT_MS_XCOMMENT (1 << 13)
/*
* mount(2) MS_* masks (MNT_MAP_LINUX map)
diff --git a/shlibs/mount/src/optmap.c b/shlibs/mount/src/optmap.c
index acd76173f..7db6d0314 100644
--- a/shlibs/mount/src/optmap.c
+++ b/shlibs/mount/src/optmap.c
@@ -133,7 +133,7 @@ static const struct libmnt_optmap userspace_opts_map[] =
{ "auto", MNT_MS_NOAUTO, MNT_INVERT | MNT_NOMTAB }, /* Can be mounted using -a */
{ "noauto", MNT_MS_NOAUTO, MNT_NOMTAB }, /* Can only be mounted explicitly */
- { "user[=]", MNT_MS_USER }, /* Allow ordinary user to mount (mtab) */
+ { "user[=]", MNT_MS_USER }, /* Allow ordinary user to mount (mtab) */
{ "nouser", MNT_MS_USER, MNT_INVERT | MNT_NOMTAB }, /* Forbid ordinary user to mount */
{ "users", MNT_MS_USERS, MNT_NOMTAB }, /* Allow ordinary users to mount */
@@ -147,9 +147,10 @@ static const struct libmnt_optmap userspace_opts_map[] =
{ "_netdev", MNT_MS_NETDEV }, /* Device requires network */
- { "comment=", MNT_MS_COMMENT, MNT_NOMTAB }, /* fstab comment only */
+ { "comment=", MNT_MS_COMMENT, MNT_NOMTAB }, /* fstab comment only */
+ { "x-", MNT_MS_XCOMMENT, MNT_NOMTAB | MNT_PREFIX }, /* x- options */
- { "loop[=]", MNT_MS_LOOP }, /* use the loop device */
+ { "loop[=]", MNT_MS_LOOP }, /* use the loop device */
{ "nofail", MNT_MS_NOFAIL, MNT_NOMTAB }, /* Do not fail if ENOENT on dev */
@@ -210,6 +211,14 @@ const struct libmnt_optmap *mnt_optmap_get_entry(
const char *p;
for (ent = map; ent && ent->name; ent++) {
+ if (ent->mask & MNT_PREFIX) {
+ if (startswith(name, ent->name)) {
+ if (mapent)
+ *mapent = ent;
+ return map;
+ }
+ continue;
+ }
if (strncmp(ent->name, name, namelen))
continue;
p = ent->name + namelen;
diff --git a/tests/expected/libmount/optstr-flags b/tests/expected/libmount/optstr-flags
index 5d138b510..17b472745 100644
--- a/tests/expected/libmount/optstr-flags
+++ b/tests/expected/libmount/optstr-flags
@@ -1,2 +1,2 @@
mountflags: 0x0000000e
-userspace-mountflags: 0x00000208
+userspace-mountflags: 0x00002208
diff --git a/tests/expected/libmount/optstr-split b/tests/expected/libmount/optstr-split
index bd2bc2374..341a64035 100644
--- a/tests/expected/libmount/optstr-split
+++ b/tests/expected/libmount/optstr-split
@@ -1,3 +1,3 @@
-user : user=kzak,loop=/dev/loop0
+user : x-bar,x-foo=foodata,user=kzak,loop=/dev/loop0
vfs : noexec,nosuid
fs : aaa,bbb=BBB,ccc
diff --git a/tests/ts/libmount/optstr b/tests/ts/libmount/optstr
index fd6d47d71..8a6a89798 100755
--- a/tests/ts/libmount/optstr
+++ b/tests/ts/libmount/optstr
@@ -69,11 +69,11 @@ $TESTPROG --remove "aaa,bbb=BBB,ccc" "bbb" &> $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "split"
-$TESTPROG --split "aaa,bbb=BBB,ccc,user=kzak,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
+$TESTPROG --split "aaa,bbb=BBB,ccc,x-bar,x-foo=foodata,user=kzak,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "flags"
-$TESTPROG --flags "aaa,bbb=BBB,ccc,user=kzak,nodev,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
+$TESTPROG --flags "aaa,bbb=BBB,x-foo,ccc,user=kzak,nodev,noexec,nosuid,loop=/dev/loop0" &> $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "apply-linux" # add noatime and remove noexec and nosuid