@@ -1372,7 +1372,7 @@ illegal_option(
* Check for conflicts and option respecification.
*/
static void
-check_opt(
+check_subopt_conflicts(
struct opt_params *opt,
int index,
bool str_seen)
@@ -1424,7 +1424,7 @@ check_opt(
* Check for conflict values between options.
*/
static void
-check_opt_value(
+check_subopt_value(
struct opt_params *opt,
int index,
long long value)
@@ -1450,6 +1450,32 @@ check_opt_value(
}
}
+/**
+ * Go through entire opt_params table and check every option for valid values
+ * and for conflicts.
+ */
+static void
+check_opt(
+ struct opt_params *opts,
+ int opti)
+{
+ int index;
+ struct opt_params *opt = &opts[opti];
+ for (index = 0; index < MAX_SUBOPTS; index++) {
+ struct subopt_param *sp = &opt->subopt_params[index];
+ check_subopt_conflicts(opt, index, false);
+ check_subopt_value(opt, index, sp->value);
+ }
+}
+static void
+check_all_opts(struct opt_params *opts)
+{
+ int opti;
+ for (opti = 0; opti < MAX_OPTS; opti++) {
+ check_opt(opts, opti);
+ }
+}
+
static long long
getnum(
const char *str,
@@ -1459,7 +1485,6 @@ getnum(
struct subopt_param *sp = &opts->subopt_params[index];
long long c;
- check_opt(opts, index, false);
/* empty strings might just return a default value */
if (!str || *str == '\0') {
if (sp->defaultval == SUBOPT_NEEDS_VAL)
@@ -1493,8 +1518,6 @@ getnum(
illegal_option(str, opts, index, NULL);
}
- check_opt_value(opts, index, c);
-
/* Validity check the result. */
if (c < sp->minval)
illegal_option(str, opts, index, _("value is too small"));
@@ -1517,7 +1540,7 @@ getstr(
struct opt_params *opts,
int index)
{
- check_opt(opts, index, true);
+ check_subopt_conflicts(opts, index, true);
/* empty strings for string options are not valid */
if (!str || *str == '\0')
@@ -2213,6 +2236,8 @@ main(
} else
dfile = xi.dname;
+ check_all_opts(opts);
+
/*
* Blocksize and sectorsize first, other things depend on them
* For RAID4/5/6 we want to align sector size and block size,
Bring the conflicts detection up to date with conflicts declaration. Signed-off-by: Jan Tulak <jtulak@redhat.com> --- v2: A call rename was fixed from check_subopt to check_subopt_conflicts --- mkfs/xfs_mkfs.c | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-)