Checks are modified to work with cross-section conflicts (data, metada, log, ...). Signed-off-by: Jan Tulak <jtulak@xxxxxxxxxx> --- mkfs/xfs_mkfs.c | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 3bb9f09..e46b55c 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -744,6 +744,9 @@ struct opt_params { }, }; +static void conflict_struct(struct opt_params *opt, struct subopt_param *subopt, + struct subopt_conflict *conflict); + #define TERABYTES(count, blog) ((__uint64_t)(count) << (40 - (blog))) #define GIGABYTES(count, blog) ((__uint64_t)(count) << (30 - (blog))) #define MEGABYTES(count, blog) ((__uint64_t)(count) << (20 - (blog))) @@ -1351,10 +1354,9 @@ check_opt( break; if (conflict_opt.test_values) break; - if (opt->subopt_params[conflict_opt.subopt].seen || - opt->subopt_params[conflict_opt.subopt].str_seen) { - conflict(opt->name, (char **)opt->subopts, - conflict_opt.subopt, index); + if (opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].seen || + opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].str_seen) { + conflict_struct(opt, sp, &conflict_opt); } } } @@ -1379,13 +1381,12 @@ check_opt_value( break; if (!conflict_opt.test_values) break; - if ((opt->subopt_params[conflict_opt.subopt].seen || - opt->subopt_params[conflict_opt.subopt].str_seen) && - opt->subopt_params[conflict_opt.subopt].value + if ((opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].seen || + opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].str_seen) && + opts[conflict_opt.opt].subopt_params[conflict_opt.subopt].value == conflict_opt.invalid_value && value == conflict_opt.at_value) { - conflict(opt->name, (char **)opt->subopts, - conflict_opt.subopt, index); + conflict_struct(opt, sp, &conflict_opt); } } } @@ -3586,12 +3587,36 @@ conflict( char *tab[], int oldidx, int newidx) + { fprintf(stderr, _("Cannot specify both -%c %s and -%c %s\n"), opt, tab[oldidx], opt, tab[newidx]); usage(); } +static void +conflict_struct( + struct opt_params *opt, + struct subopt_param *subopt, + struct subopt_conflict *conflict) +{ + if(conflict->message) { + fprintf(stderr, _("Cannot specify both -%c %s and -%c %s: %s\n"), + opt->name, + opt->subopts[subopt->index], + opts[conflict->opt].name, + opts[conflict->opt].subopts[conflict->subopt], + _(conflict->message)); + } else { + fprintf(stderr, _("Cannot specify both -%c %s and -%c %s\n"), + opt->name, + opt->subopts[subopt->index], + opts[conflict->opt].name, + opts[conflict->opt].subopts[conflict->subopt]); + } + usage(); +} + static void illegal( -- 2.8.1 -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html