summaryrefslogtreecommitdiffstats
path: root/sys-utils/mount.c
diff options
context:
space:
mode:
authorKarel Zak2012-07-26 09:26:21 +0200
committerKarel Zak2012-07-26 09:26:21 +0200
commit51a37c19069b56e2ac648da71e6e39d5b3ed16fe (patch)
tree701775b697cbf9039757f69964ab693075b09f81 /sys-utils/mount.c
parentlscpu: use err_exclusive_options() (diff)
downloadkernel-qcow2-util-linux-51a37c19069b56e2ac648da71e6e39d5b3ed16fe.tar.gz
kernel-qcow2-util-linux-51a37c19069b56e2ac648da71e6e39d5b3ed16fe.tar.xz
kernel-qcow2-util-linux-51a37c19069b56e2ac648da71e6e39d5b3ed16fe.zip
mount: use err_exclusive_options()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/mount.c')
-rw-r--r--sys-utils/mount.c47
1 files changed, 14 insertions, 33 deletions
diff --git a/sys-utils/mount.c b/sys-utils/mount.c
index 461569f2b..6b3078967 100644
--- a/sys-utils/mount.c
+++ b/sys-utils/mount.c
@@ -43,12 +43,8 @@
#define OPTUTILS_EXIT_CODE MOUNT_EX_USAGE
#include "optutils.h"
-#define EXCL_ERROR "--{bind,make-*}"
-
/*** TODO: DOCS:
*
- * --guess-fstype is unsupported
- *
* --options-mode={ignore,append,prepend,replace} MNT_OMODE_{IGNORE, ...}
* --options-source={fstab,mtab,disable} MNT_OMODE_{FSTAB,MTAB,NOTAB}
* --options-source-force MNT_OMODE_FORCE
@@ -698,23 +694,6 @@ int main(int argc, char **argv)
MOUNT_OPT_SOURCE
};
- enum {
- EXCL_NONE,
- EXCL_BIND,
- EXCL_MAKE_SHARED,
- EXCL_MAKE_SLAVE,
- EXCL_MAKE_PRIVATE,
- EXCL_MAKE_UNBINDABLE,
- EXCL_MAKE_RSHARED,
- EXCL_MAKE_RSLAVE,
- EXCL_MAKE_RPRIVATE,
- EXCL_MAKE_RUNBINDABLE,
- EXCL_SOURCE,
- EXCL_UUID,
- EXCL_LABEL
- };
- int excl_any = EXCL_NONE, excl_src = EXCL_NONE;
-
static const struct option longopts[] = {
{ "all", 0, 0, 'a' },
{ "fake", 0, 0, 'f' },
@@ -753,6 +732,18 @@ int main(int argc, char **argv)
{ NULL, 0, 0, 0 }
};
+ static const ul_excl_t excl[] = { /* rows and cols in in ASCII order */
+ { 'B','M','R', /* bind,move,rbind */
+ MOUNT_OPT_SHARED, MOUNT_OPT_SLAVE,
+ MOUNT_OPT_PRIVATE, MOUNT_OPT_UNBINDABLE,
+ MOUNT_OPT_RSHARED, MOUNT_OPT_RSLAVE,
+ MOUNT_OPT_RPRIVATE, MOUNT_OPT_RUNBINDABLE },
+
+ { 'L','U', MOUNT_OPT_SOURCE }, /* label,uuid,source */
+ { 0 }
+ };
+ int excl_st[ARRAY_SIZE(excl)] = UL_EXCL_STATUS_INIT;
+
sanitize_env();
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -776,6 +767,8 @@ int main(int argc, char **argv)
c != MOUNT_OPT_SOURCE)
exit_non_root(option_to_longopt(c, longopts));
+ err_exclusive_options(c, longopts, excl, excl_st);
+
switch(c) {
case 'a':
all = 1;
@@ -827,14 +820,12 @@ int main(int argc, char **argv)
_("invalid passphrase file descriptor"));
break;
case 'L':
- exclusive_option(&excl_src, EXCL_LABEL, _("-L, -U and --source"));
xasprintf(&srcbuf, "LABEL=\"%s\"", optarg);
mnt_context_disable_swapmatch(cxt, 1);
mnt_context_set_source(cxt, srcbuf);
free(srcbuf);
break;
case 'U':
- exclusive_option(&excl_src, EXCL_UUID, _("-L, -U and --source"));
xasprintf(&srcbuf, "UUID=\"%s\"", optarg);
mnt_context_disable_swapmatch(cxt, 1);
mnt_context_set_source(cxt, srcbuf);
@@ -853,7 +844,6 @@ int main(int argc, char **argv)
mnt_context_enable_sloppy(cxt, TRUE);
break;
case 'B':
- exclusive_option(&excl_any, EXCL_BIND, EXCL_ERROR);
oper |= MS_BIND;
break;
case 'M':
@@ -863,35 +853,27 @@ int main(int argc, char **argv)
oper |= (MS_BIND | MS_REC);
break;
case MOUNT_OPT_SHARED:
- exclusive_option(&excl_any, EXCL_MAKE_SHARED, EXCL_ERROR);
oper |= MS_SHARED;
break;
case MOUNT_OPT_SLAVE:
- exclusive_option(&excl_any, EXCL_MAKE_SLAVE, EXCL_ERROR);
oper |= MS_SLAVE;
break;
case MOUNT_OPT_PRIVATE:
- exclusive_option(&excl_any, EXCL_MAKE_PRIVATE, EXCL_ERROR);
oper |= MS_PRIVATE;
break;
case MOUNT_OPT_UNBINDABLE:
- exclusive_option(&excl_any, EXCL_MAKE_UNBINDABLE, EXCL_ERROR);
oper |= MS_UNBINDABLE;
break;
case MOUNT_OPT_RSHARED:
- exclusive_option(&excl_any, EXCL_MAKE_RSHARED, EXCL_ERROR);
oper |= (MS_SHARED | MS_REC);
break;
case MOUNT_OPT_RSLAVE:
- exclusive_option(&excl_any, EXCL_MAKE_RSLAVE, EXCL_ERROR);
oper |= (MS_SLAVE | MS_REC);
break;
case MOUNT_OPT_RPRIVATE:
- exclusive_option(&excl_any, EXCL_MAKE_RPRIVATE, EXCL_ERROR);
oper |= (MS_PRIVATE | MS_REC);
break;
case MOUNT_OPT_RUNBINDABLE:
- exclusive_option(&excl_any, EXCL_MAKE_RUNBINDABLE, EXCL_ERROR);
oper |= (MS_UNBINDABLE | MS_REC);
break;
case MOUNT_OPT_TARGET:
@@ -899,7 +881,6 @@ int main(int argc, char **argv)
mnt_context_set_target(cxt, optarg);
break;
case MOUNT_OPT_SOURCE:
- exclusive_option(&excl_src, EXCL_SOURCE, _("-L, -U and --source"));
mnt_context_disable_swapmatch(cxt, 1);
mnt_context_set_source(cxt, optarg);
break;