From: Karel Zak Date: Thu, 21 Apr 2011 12:53:23 +0000 (+0200) Subject: libmount: add support for x-* mount comments X-Git-Tag: v2.20-rc1~323 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=699abc838104ff18e0883d42cfdac60a7c9f03ab;p=thirdparty%2Futil-linux.git libmount: add support for x-* mount comments The current way how add any comment or extra information to /etc/fstab is to use comment="" mount option. This is not too elegant and readable if you want to add more than one comment. It seems better to add any generic prefix that will be used for all 3rd-party userspace mount options. Expected syntax is: x--[=] For example: x-systemd-bar=managed All x-* options (as well as comment=) are ignored by libmount and not stored to the mtab file. Requested-by: Lennart Poettering Signed-off-by: Karel Zak --- diff --git a/shlibs/mount/src/libmount.h.in b/shlibs/mount/src/libmount.h.in index e168f28454..7d02ddcf0f 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 acd76173fd..7db6d03142 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 5d138b510e..17b4727458 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 bd2bc23749..341a640355 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 fd6d47d710..8a6a897984 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