xfs
[Top] [All Lists]

[PATCH 6/8] mkfs: add cross-section conflict checks

To: xfs@xxxxxxxxxxx
Subject: [PATCH 6/8] mkfs: add cross-section conflict checks
From: Jan Tulak <jtulak@xxxxxxxxxx>
Date: Tue, 2 Aug 2016 17:42:17 +0200
Cc: Jan Tulak <jtulak@xxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1470152539-18759-1-git-send-email-jtulak@xxxxxxxxxx>
References: <1470152539-18759-1-git-send-email-jtulak@xxxxxxxxxx>
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 6f3f278..2eca989 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -728,6 +728,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)))
@@ -1329,10 +1332,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);
                }
        }
 }
@@ -1357,13 +1359,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);
                }
        }
 }
@@ -3430,12 +3431,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.5.5

<Prev in Thread] Current Thread [Next in Thread>