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
commit98d40922f775d6346746309cfd95403d6dfabe67 (patch)
treee57c78dcefd33b1cba438cd392f33f0b2a1a5f68
parent997136c64e88d8c42c7def05042b8a60691da13a (diff)
downloadxfsprogs-dev-98d40922f775d6346746309cfd95403d6dfabe67.tar.gz
mkfs: factor naming 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.c68
1 files changed, 30 insertions, 38 deletions
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 87e7a2da26..829660a348 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -1708,6 +1708,28 @@ naming_opts_parser(
char *value,
struct cli_params *cli)
{
+ switch (subopt) {
+ case N_LOG:
+ cli->dirblocklog = getnum(value, opts, N_LOG);
+ break;
+ case N_SIZE:
+ cli->dirblocksize = getstr(value, opts, N_SIZE);
+ break;
+ case N_VERSION:
+ value = getstr(value, &nopts, N_VERSION);
+ if (!strcasecmp(value, "ci")) {
+ /* ASCII CI mode */
+ cli->sb_feat.nci = true;
+ } else {
+ cli->sb_feat.dir_version = getnum(value, opts, N_VERSION);
+ }
+ break;
+ case N_FTYPE:
+ cli->sb_feat.dirftype = getnum(value, opts, N_FTYPE);
+ break;
+ default:
+ return -EINVAL;
+ }
return 0;
}
@@ -2030,45 +2052,15 @@ main(
/* end temp don't break code */
break;
case 'n':
- p = optarg;
- while (*p != '\0') {
- char **subopts = (char **)nopts.subopts;
- char *value;
+ parse_subopts(c, optarg, &cli);
- switch (getsubopt(&p, subopts, &value)) {
- case N_LOG:
- dirblocklog = getnum(value, &nopts,
- N_LOG);
- dirblocksize = 1 << dirblocklog;
- nlflag = 1;
- break;
- case N_SIZE:
- dirblocksize = getnum(value, &nopts,
- N_SIZE);
- dirblocklog =
- libxfs_highbit32(dirblocksize);
- nsflag = 1;
- break;
- case N_VERSION:
- value = getstr(value, &nopts, N_VERSION);
- if (!strcasecmp(value, "ci")) {
- /* ASCII CI mode */
- sb_feat.nci = true;
- } else {
- sb_feat.dir_version =
- getnum(value, &nopts,
- N_VERSION);
- }
- nvflag = 1;
- break;
- case N_FTYPE:
- sb_feat.dirftype = getnum(value, &nopts,
- N_FTYPE);
- break;
- default:
- unknown('n', value);
- }
- }
+ /* temp don't break code */
+ if ((nsflag = cli_opt_set(&nopts, N_SIZE)))
+ dirblocksize = getnum(cli.dirblocksize, &nopts, N_SIZE);
+ dirblocklog = cli.dirblocklog;
+
+ nlflag = cli_opt_set(&nopts, N_LOG);
+ /* end temp don't break code */
break;
case 'N':
Nflag = 1;