aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2017-12-06 17:14:27 -0600
committerEric Sandeen <sandeen@redhat.com>2017-12-06 17:14:27 -0600
commitf3bc91a450e1e25cc99cd73fe6d5c4a14a013438 (patch)
treee3856fc05654628fbfcac8d58c0974cfeee59094
parenta3ac5af10773d83603350645aae790e30daafff3 (diff)
downloadxfsprogs-dev-f3bc91a450e1e25cc99cd73fe6d5c4a14a013438.tar.gz
mkfs: factor log subopts parser
Signed-Off-By: Dave Chinner <dchinner@redhat.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
-rw-r--r--mkfs/xfs_mkfs.c127
1 files changed, 65 insertions, 62 deletions
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 2292362b49..a4f3804880 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -1622,6 +1622,48 @@ log_opts_parser(
char *value,
struct cli_params *cli)
{
+ int lsectorlog;
+
+ switch (subopt) {
+ case L_AGNUM:
+ cli->logagno = getnum(value, &lopts, L_AGNUM);
+ break;
+ case L_FILE:
+ cli->xi->lisfile = getnum(value, &lopts, L_FILE);
+ break;
+ case L_INTERNAL:
+ cli->loginternal = getnum(value, &lopts, L_INTERNAL);
+ break;
+ case L_SU:
+ cli->lsu = getstr(value, &lopts, L_SU);
+ break;
+ case L_SUNIT:
+ cli->lsunit = getnum(value, &lopts, L_SUNIT);
+ break;
+ case L_NAME:
+ case L_DEV:
+ cli->xi->logname = getstr(value, &lopts, L_NAME);
+ cli->loginternal = 0;
+ break;
+ case L_VERSION:
+ cli->sb_feat.log_version = getnum(value, &lopts, L_VERSION);
+ break;
+ case L_SIZE:
+ cli->logsize = getstr(value, &lopts, L_SIZE);
+ break;
+ case L_SECTLOG:
+ lsectorlog = getnum(value, &lopts, L_SECTLOG);
+ cli->lsectorsize = 1 << lsectorlog;
+ break;
+ case L_SECTSIZE:
+ cli->lsectorsize = getnum(value, &lopts, L_SECTSIZE);
+ break;
+ case L_LAZYSBCNTR:
+ cli->sb_feat.lazy_sb_counters = getnum(value, &lopts, L_LAZYSBCNTR);
+ break;
+ default:
+ return -EINVAL;
+ }
return 0;
}
@@ -1925,70 +1967,31 @@ main(
/* end temp don't break code */
break;
case 'l':
- p = optarg;
- while (*p != '\0') {
- char **subopts = (char **)lopts.subopts;
- char *value;
+ parse_subopts(c, optarg, &cli);
- switch (getsubopt(&p, subopts, &value)) {
- case L_AGNUM:
- logagno = getnum(value, &lopts, L_AGNUM);
- laflag = 1;
- break;
- case L_FILE:
- xi.lisfile = getnum(value, &lopts,
- L_FILE);
- break;
- case L_INTERNAL:
- loginternal = getnum(value, &lopts,
- L_INTERNAL);
- liflag = 1;
- break;
- case L_SU:
- lsu = getnum(value, &lopts, L_SU);
- lsuflag = 1;
- break;
- case L_SUNIT:
- lsunit = getnum(value, &lopts, L_SUNIT);
- lsunitflag = 1;
- break;
- case L_NAME:
- case L_DEV:
- logfile = getstr(value, &lopts, L_NAME);
- xi.logname = logfile;
- ldflag = 1;
- loginternal = 0;
- break;
- case L_VERSION:
- sb_feat.log_version =
- getnum(value, &lopts, L_VERSION);
- lvflag = 1;
- break;
- case L_SIZE:
- logsize = getstr(value, &lopts, L_SIZE);
- break;
- case L_SECTLOG:
- lsectorlog = getnum(value, &lopts,
- L_SECTLOG);
- lsectorsize = 1 << lsectorlog;
- lslflag = 1;
- break;
- case L_SECTSIZE:
- lsectorsize = getnum(value, &lopts,
- L_SECTSIZE);
- lsectorlog =
- libxfs_highbit32(lsectorsize);
- lssflag = 1;
- break;
- case L_LAZYSBCNTR:
- sb_feat.lazy_sb_counters =
- getnum(value, &lopts,
- L_LAZYSBCNTR);
- break;
- default:
- unknown('l', value);
- }
+ /* temp don't break code */
+ logagno = cli.logagno;
+ loginternal = cli.loginternal;
+ logfile = xi.logname;
+ logsize = cli.logsize;
+ lsectorsize = cli.lsectorsize;
+ lsectorlog = libxfs_highbit32(lsectorsize);
+
+ lsunit = cli.lsunit;
+ lsunitflag = cli_opt_set(&lopts, L_SUNIT);
+ if (cli_opt_set(&lopts, L_SU)) {
+ lsu = getnum(cli.lsu, &lopts, L_SU);
+ lsuflag = 1;
}
+
+ laflag = cli_opt_set(&lopts, L_AGNUM);
+ liflag = cli_opt_set(&lopts, L_INTERNAL);
+ ldflag = cli_opt_set(&lopts, L_NAME) ||
+ cli_opt_set(&lopts, L_DEV);
+ lvflag = cli_opt_set(&lopts, L_VERSION);
+ lslflag = cli_opt_set(&lopts, L_SECTLOG);
+ lssflag = cli_opt_set(&lopts, L_SECTSIZE);
+ /* end temp don't break code */
break;
case 'L':
if (strlen(optarg) > sizeof(sbp->sb_fname))