diff options
author | Dave Chinner <dchinner@redhat.com> | 2017-12-06 17:14:27 -0600 |
---|---|---|
committer | Eric Sandeen <sandeen@redhat.com> | 2017-12-06 17:14:27 -0600 |
commit | f3bc91a450e1e25cc99cd73fe6d5c4a14a013438 (patch) | |
tree | e3856fc05654628fbfcac8d58c0974cfeee59094 | |
parent | a3ac5af10773d83603350645aae790e30daafff3 (diff) | |
download | xfsprogs-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.c | 127 |
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)) |