xfs
[Top] [All Lists]

[PATCH 19/19] mkfs: add optional 'reason' for illegal_option

To: xfs@xxxxxxxxxxx
Subject: [PATCH 19/19] mkfs: add optional 'reason' for illegal_option
From: jtulak@xxxxxxxxxx
Date: Thu, 24 Mar 2016 12:15:36 +0100
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1458818136-56043-1-git-send-email-jtulak@xxxxxxxxxx>
References: <1458818136-56043-1-git-send-email-jtulak@xxxxxxxxxx>
From: Jan Tulak <jtulak@xxxxxxxxxx>

Allow us to tell the user what exactly is wrong with his options.
For example, that the value is too small, instead of just generic
"bad option."

Signed-off-by: Jan Tulak <jtulak@xxxxxxxxxx>
---
 mkfs/xfs_mkfs.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 680c6c4..76e193d 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -1550,11 +1550,18 @@ static __attribute__((noreturn)) void
 illegal_option(
        const char      *value,
        struct opt_params       *opts,
-       int             index)
+       int             index,
+       const char *reason)
 {
-       fprintf(stderr,
-               _("Illegal value %s for -%c %s option\n"),
-               value, opts->name, opts->subopts[index]);
+       if(reason == NULL){
+               fprintf(stderr,
+                       _("Illegal value %s for -%c %s option\n"),
+                       value, opts->name, opts->subopts[index]);
+       } else {
+               fprintf(stderr,
+                       _("Illegal value %s for -%c %s option: %s\n"),
+                       value, opts->name, opts->subopts[index], reason);
+       }
        usage();
 }

@@ -1646,16 +1653,18 @@ getnum(

                c = strtoll(str, &str_end, 0);
                if (c == 0 && str_end == str)
-                       illegal_option(str, opts, index);
+                       illegal_option(str, opts, index, NULL);
                if (*str_end != '\0')
-                       illegal_option(str, opts, index);
+                       illegal_option(str, opts, index, NULL);
        }

        /* Validity check the result. */
-       if (c < sp->minval || c > sp->maxval)
-               illegal_option(str, opts, index);
+       if (c < sp->minval)
+               illegal_option(str, opts, index, "value is too small");
+       else if (c > sp->maxval)
+               illegal_option(str, opts, index, "value is too large");
        if (sp->is_power_2 && !ispow2(c))
-               illegal_option(str, opts, index);
+               illegal_option(str, opts, index, "value has to be power of 2");
        return c;
 }

--
2.6.0

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