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
commita3ac5af10773d83603350645aae790e30daafff3 (patch)
tree73623207db45e00809f01c3dbd76fffd8ae2beac
parenta1273b7c5853e29ba9f49ed8aefb954dcc56476a (diff)
downloadxfsprogs-dev-a3ac5af10773d83603350645aae790e30daafff3.tar.gz
mkfs: factor inode 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.c94
1 files changed, 48 insertions, 46 deletions
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 7dca302b57..2292362b49 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -1581,6 +1581,37 @@ inode_opts_parser(
char *value,
struct cli_params *cli)
{
+ int inodelog;
+
+ switch (subopt) {
+ case I_ALIGN:
+ cli->sb_feat.inode_align = getnum(value, &iopts, I_ALIGN);
+ break;
+ case I_LOG:
+ inodelog = getnum(value, &iopts, I_LOG);
+ cli->inodesize = 1 << inodelog;
+ break;
+ case I_MAXPCT:
+ cli->imaxpct = getnum(value, &iopts, I_MAXPCT);
+ break;
+ case I_PERBLOCK:
+ cli->inopblock = getnum(value, &iopts, I_PERBLOCK);
+ break;
+ case I_SIZE:
+ cli->inodesize = getnum(value, &iopts, I_SIZE);
+ break;
+ case I_ATTR:
+ cli->sb_feat.attr_version = getnum(value, &iopts, I_ATTR);
+ break;
+ case I_PROJID32BIT:
+ cli->sb_feat.projid16bit = !getnum(value, &iopts, I_PROJID32BIT);
+ break;
+ case I_SPINODES:
+ cli->sb_feat.spinodes = getnum(value, &iopts, I_SPINODES);
+ break;
+ default:
+ return -EINVAL;
+ }
return 0;
}
@@ -1795,6 +1826,7 @@ main(
};
struct cli_params cli = {
.xi = &xi,
+ .sb_feat = sb_feat,
};
platform_uuid_generate(&uuid);
@@ -1878,53 +1910,19 @@ main(
/* end temp don't break code */
break;
case 'i':
- p = optarg;
- while (*p != '\0') {
- char **subopts = (char **)iopts.subopts;
- char *value;
+ parse_subopts(c, optarg, &cli);
- switch (getsubopt(&p, subopts, &value)) {
- case I_ALIGN:
- sb_feat.inode_align = getnum(value,
- &iopts, I_ALIGN);
- break;
- case I_LOG:
- inodelog = getnum(value, &iopts, I_LOG);
- isize = 1 << inodelog;
- ilflag = 1;
- break;
- case I_MAXPCT:
- imaxpct = getnum(value, &iopts,
- I_MAXPCT);
- imflag = 1;
- break;
- case I_PERBLOCK:
- inopblock = getnum(value, &iopts,
- I_PERBLOCK);
- ipflag = 1;
- break;
- case I_SIZE:
- isize = getnum(value, &iopts, I_SIZE);
- inodelog = libxfs_highbit32(isize);
- isflag = 1;
- break;
- case I_ATTR:
- sb_feat.attr_version =
- getnum(value, &iopts, I_ATTR);
- break;
- case I_PROJID32BIT:
- sb_feat.projid16bit =
- !getnum(value, &iopts,
- I_PROJID32BIT);
- break;
- case I_SPINODES:
- sb_feat.spinodes = getnum(value,
- &iopts, I_SPINODES);
- break;
- default:
- unknown('i', value);
- }
- }
+ /* temp don't break code */
+ isize = cli.inodesize;
+ inodelog = libxfs_highbit32(isize);
+ inopblock = cli.inopblock;
+ ilflag = cli_opt_set(&iopts, I_LOG);
+ isflag = cli_opt_set(&iopts, I_SIZE);
+ ipflag = cli_opt_set(&iopts, I_PERBLOCK);
+
+ imaxpct = cli.imaxpct;
+ imflag = cli_opt_set(&iopts, I_MAXPCT);
+ /* end temp don't break code */
break;
case 'l':
p = optarg;
@@ -2172,6 +2170,10 @@ main(
} else
dfile = xi.dname;
+ /* temp don't break code */
+ sb_feat = cli.sb_feat;
+ /* end temp don't break code */
+
/*
* Blocksize and sectorsize first, other things depend on them
* For RAID4/5/6 we want to align sector size and block size,