From: Jan Tulak <jtulak@redhat.com>
To: linux-xfs@vger.kernel.org
Cc: Jan Tulak <jtulak@redhat.com>
Subject: [PATCH 5/7] mkfs: move getnum within the file
Date: Thu, 20 Jul 2017 11:29:30 +0200 [thread overview]
Message-ID: <20170720092932.32580-6-jtulak@redhat.com> (raw)
In-Reply-To: <20170720092932.32580-1-jtulak@redhat.com>
Move getnum, check_opt and illegal_option within the file. We have to do
this to avoid dependency issues with the following patch. There is no
other change in this patch, just cut&paste of these functions.
Signed-off-by: Jan Tulak <jtulak@redhat.com>
---
mkfs/xfs_mkfs.c | 236 ++++++++++++++++++++++++++++----------------------------
1 file changed, 118 insertions(+), 118 deletions(-)
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index f10cb15a..9d2db2a2 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -761,6 +761,124 @@ get_conf_raw(int opt, int subopt)
return opts[opt].subopt_params[subopt].raw_input;
}
+static __attribute__((noreturn)) void
+illegal_option(
+ const char *value,
+ struct opt_params *opts,
+ int index,
+ const char *reason)
+{
+ fprintf(stderr,
+ _("Illegal value %s for -%c %s option. %s\n"),
+ value, opts->name, opts->subopts[index],
+ reason ? reason : "");
+ usage();
+}
+
+/*
+ * Check for conflicts and option respecification.
+ */
+static void
+check_opt(
+ struct opt_params *opts,
+ int index,
+ bool str_seen)
+{
+ struct subopt_param *sp = &opts->subopt_params[index];
+ int i;
+
+ if (sp->index != index) {
+ fprintf(stderr,
+ ("Developer screwed up option parsing (%d/%d)! Please report!\n"),
+ sp->index, index);
+ reqval(opts->name, (char **)opts->subopts, index);
+ }
+
+ /*
+ * Check for respecification of the option. This is more complex than it
+ * seems because some options are parsed twice - once as a string during
+ * input parsing, then later the string is passed to getnum for
+ * conversion into a number and bounds checking. Hence the two variables
+ * used to track the different uses based on the @str parameter passed
+ * to us.
+ */
+ if (!str_seen) {
+ if (sp->seen)
+ respec(opts->name, (char **)opts->subopts, index);
+ sp->seen = true;
+ } else {
+ if (sp->str_seen)
+ respec(opts->name, (char **)opts->subopts, index);
+ sp->str_seen = true;
+ }
+
+ /* check for conflicts with the option */
+ for (i = 0; i < MAX_CONFLICTS; i++) {
+ int conflict_opt = sp->conflicts[i];
+
+ if (conflict_opt == LAST_CONFLICT)
+ break;
+ if (opts->subopt_params[conflict_opt].seen ||
+ opts->subopt_params[conflict_opt].str_seen)
+ conflict(opts->name, (char **)opts->subopts,
+ conflict_opt, index);
+ }
+}
+
+static long long
+getnum(
+ const char *str,
+ struct opt_params *opts,
+ int index)
+{
+ struct subopt_param *sp = &opts->subopt_params[index];
+ long long c;
+
+ check_opt(opts, index, false);
+ set_conf_raw(opts->index, index, str);
+ /* empty strings might just return a default value */
+ if (!str || *str == '\0') {
+ if (sp->flagval == SUBOPT_NEEDS_VAL)
+ reqval(opts->name, (char **)opts->subopts, index);
+ return sp->flagval;
+ }
+
+ if (sp->minval == 0 && sp->maxval == 0) {
+ fprintf(stderr,
+ _("Option -%c %s has undefined minval/maxval."
+ "Can't verify value range. This is a bug.\n"),
+ opts->name, opts->subopts[index]);
+ exit(1);
+ }
+
+ /*
+ * Some values are pure numbers, others can have suffixes that define
+ * the units of the number. Those get passed to cvtnum(), otherwise we
+ * convert it ourselves to guarantee there is no trailing garbage in the
+ * number.
+ */
+ if (sp->convert)
+ c = cvtnum(blocksize, sectorsize, str);
+ else {
+ char *str_end;
+
+ c = strtoll(str, &str_end, 0);
+ if (c == 0 && str_end == str)
+ illegal_option(str, opts, index, NULL);
+ if (*str_end != '\0')
+ illegal_option(str, opts, index, NULL);
+ }
+
+ /* Validity check the result. */
+ 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, _("value must be a power of 2"));
+ return c;
+}
+
/*
* Convert lsu to lsunit for 512 bytes blocks and check validity of the values.
*/
@@ -1285,124 +1403,6 @@ sb_set_features(
}
-static __attribute__((noreturn)) void
-illegal_option(
- const char *value,
- struct opt_params *opts,
- int index,
- const char *reason)
-{
- fprintf(stderr,
- _("Illegal value %s for -%c %s option. %s\n"),
- value, opts->name, opts->subopts[index],
- reason ? reason : "");
- usage();
-}
-
-/*
- * Check for conflicts and option respecification.
- */
-static void
-check_opt(
- struct opt_params *opts,
- int index,
- bool str_seen)
-{
- struct subopt_param *sp = &opts->subopt_params[index];
- int i;
-
- if (sp->index != index) {
- fprintf(stderr,
- ("Developer screwed up option parsing (%d/%d)! Please report!\n"),
- sp->index, index);
- reqval(opts->name, (char **)opts->subopts, index);
- }
-
- /*
- * Check for respecification of the option. This is more complex than it
- * seems because some options are parsed twice - once as a string during
- * input parsing, then later the string is passed to getnum for
- * conversion into a number and bounds checking. Hence the two variables
- * used to track the different uses based on the @str parameter passed
- * to us.
- */
- if (!str_seen) {
- if (sp->seen)
- respec(opts->name, (char **)opts->subopts, index);
- sp->seen = true;
- } else {
- if (sp->str_seen)
- respec(opts->name, (char **)opts->subopts, index);
- sp->str_seen = true;
- }
-
- /* check for conflicts with the option */
- for (i = 0; i < MAX_CONFLICTS; i++) {
- int conflict_opt = sp->conflicts[i];
-
- if (conflict_opt == LAST_CONFLICT)
- break;
- if (opts->subopt_params[conflict_opt].seen ||
- opts->subopt_params[conflict_opt].str_seen)
- conflict(opts->name, (char **)opts->subopts,
- conflict_opt, index);
- }
-}
-
-static long long
-getnum(
- const char *str,
- struct opt_params *opts,
- int index)
-{
- struct subopt_param *sp = &opts->subopt_params[index];
- long long c;
-
- check_opt(opts, index, false);
- set_conf_raw(opts->index, index, str);
- /* empty strings might just return a default value */
- if (!str || *str == '\0') {
- if (sp->flagval == SUBOPT_NEEDS_VAL)
- reqval(opts->name, (char **)opts->subopts, index);
- return sp->flagval;
- }
-
- if (sp->minval == 0 && sp->maxval == 0) {
- fprintf(stderr,
- _("Option -%c %s has undefined minval/maxval."
- "Can't verify value range. This is a bug.\n"),
- opts->name, opts->subopts[index]);
- exit(1);
- }
-
- /*
- * Some values are pure numbers, others can have suffixes that define
- * the units of the number. Those get passed to cvtnum(), otherwise we
- * convert it ourselves to guarantee there is no trailing garbage in the
- * number.
- */
- if (sp->convert)
- c = cvtnum(blocksize, sectorsize, str);
- else {
- char *str_end;
-
- c = strtoll(str, &str_end, 0);
- if (c == 0 && str_end == str)
- illegal_option(str, opts, index, NULL);
- if (*str_end != '\0')
- illegal_option(str, opts, index, NULL);
- }
-
- /* Validity check the result. */
- 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, _("value must be a power of 2"));
- return c;
-}
-
/*
* Option is a string - do all the option table work, and check there
* is actually an option string. Otherwise we don't do anything with the string
--
2.11.0
next prev parent reply other threads:[~2017-07-20 9:29 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-20 9:29 [PATCH 0/7] mkfs: save user input into opts table Jan Tulak
2017-07-20 9:29 ` [PATCH 1/7] mkfs: Save raw user input field to the opts struct Jan Tulak
2017-07-27 16:27 ` Luis R. Rodriguez
2017-07-28 14:45 ` Jan Tulak
2017-07-29 17:12 ` Luis R. Rodriguez
2017-08-02 14:30 ` Jan Tulak
2017-08-02 15:51 ` Jan Tulak
2017-08-02 19:41 ` Luis R. Rodriguez
2017-08-02 19:19 ` Luis R. Rodriguez
2017-08-03 13:07 ` Jan Tulak
2017-08-03 22:25 ` Luis R. Rodriguez
2017-08-04 13:50 ` Jan Tulak
2017-08-07 17:26 ` Luis R. Rodriguez
2017-08-07 17:36 ` Jan Tulak
2017-07-20 9:29 ` [PATCH 2/7] mkfs: rename defaultval to flagval in opts Jan Tulak
2017-07-20 9:29 ` [PATCH 3/7] mkfs: remove intermediate getstr followed by getnum Jan Tulak
2017-07-20 15:54 ` Darrick J. Wong
2017-07-21 8:56 ` Jan Tulak
2017-07-26 20:49 ` Eric Sandeen
2017-07-27 7:50 ` Jan Tulak
2017-07-27 13:35 ` Eric Sandeen
2017-07-21 12:24 ` [PATCH 3/7 v2] " Jan Tulak
2017-07-26 23:23 ` Eric Sandeen
2017-07-20 9:29 ` [PATCH 4/7] mkfs: merge tables for opts parsing into one table Jan Tulak
2017-07-20 9:29 ` Jan Tulak [this message]
2017-07-26 23:27 ` [PATCH 5/7] mkfs: move getnum within the file Eric Sandeen
2017-07-20 9:29 ` [PATCH 6/7] mkfs: extend opt_params with a value field Jan Tulak
2017-07-27 16:18 ` Luis R. Rodriguez
2017-07-28 14:44 ` Jan Tulak
2017-07-29 17:02 ` Luis R. Rodriguez
2017-08-02 14:43 ` Jan Tulak
2017-08-02 16:57 ` Luis R. Rodriguez
2017-08-02 18:11 ` Jan Tulak
2017-08-02 19:48 ` Luis R. Rodriguez
2017-08-03 13:23 ` Jan Tulak
2017-08-03 20:47 ` Luis R. Rodriguez
2017-07-20 9:29 ` [PATCH 7/7] mkfs: save user input values into opts Jan Tulak
2017-07-26 23:53 ` Eric Sandeen
2017-07-27 14:21 ` Jan Tulak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170720092932.32580-6-jtulak@redhat.com \
--to=jtulak@redhat.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox