On Wed, Dec 07, 2016 at 02:27:10PM +0100, Jan Tulak wrote: > Add a new field int opt_params - value, which is filled with user input. > > Signed-off-by: Jan Tulak <jtulak@xxxxxxxxxx> Despite a very minor whitespace issue... Reviewed-by: Bill O'Donnell <billodo@xxxxxxxxxx> > --- > mkfs/xfs_mkfs.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 132 insertions(+) > > diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c > index 372c620..edcfdc0 100644 > --- a/mkfs/xfs_mkfs.c > +++ b/mkfs/xfs_mkfs.c > @@ -115,6 +115,12 @@ unsigned int sectorsize; > * sets what is used with simple specifying the subopt (-d file). > * A special SUBOPT_NEEDS_VAL can be used to require a user-given > * value in any case. > + * > + * value INTERNAL > + * Do not set this on initialization. Use defaultval for what you want > + * to do. This is filled with user input and anything you write here now > + * is overwritten. (If the user input is a string and not a number, this > + * value is set to a positive non-zero number.) > */ > struct opt_params { > int index; > @@ -131,6 +137,7 @@ struct opt_params { > long long minval; > long long maxval; > long long defaultval; > + long long value; > } subopt_params[MAX_SUBOPTS]; > } opts[MAX_OPTS] = { > #define OPT_B 0 > @@ -1566,12 +1573,20 @@ main( > B_LOG); > blocksize = 1 << blocklog; > blflag = 1; > + opts[OPT_B].subopt_params[B_LOG].value = > + blocklog; > + opts[OPT_B].subopt_params[B_SIZE].value = > + blocksize; > break; > case B_SIZE: > blocksize = getnum(value, &opts[OPT_B], > B_SIZE); > blocklog = libxfs_highbit32(blocksize); > bsflag = 1; > + opts[OPT_B].subopt_params[B_LOG].value = > + blocklog; > + opts[OPT_B].subopt_params[B_SIZE].value = > + blocksize; > break; > default: > unknown('b', value); > @@ -1589,47 +1604,70 @@ main( > agcount = getnum(value, &opts[OPT_D], > D_AGCOUNT); > daflag = 1; > + opts[OPT_D].subopt_params[D_AGCOUNT].value = > + agcount; > break; > case D_AGSIZE: > agsize = getnum(value, &opts[OPT_D], > D_AGSIZE); > dasize = 1; > + opts[OPT_D].subopt_params[D_AGSIZE].value = > + agsize; > break; > case D_FILE: > xi.disfile = getnum(value, &opts[OPT_D], > D_FILE); > + opts[OPT_D].subopt_params[D_FILE].value = > + xi.disfile; > break; > case D_NAME: > xi.dname = getstr(value, &opts[OPT_D], > D_NAME); > + opts[OPT_D].subopt_params[D_NAME].value = 1; > break; > case D_SIZE: > dbytes = getnum(value, &opts[OPT_D], > D_SIZE); > + opts[OPT_D].subopt_params[D_SIZE].value = > + dbytes; > break; > case D_SUNIT: > dsunit = getnum(value, &opts[OPT_D], > D_SUNIT); > + opts[OPT_D].subopt_params[D_SUNIT].value = > + dsunit; > break; > case D_SWIDTH: > dswidth = getnum(value, &opts[OPT_D], > D_SWIDTH); > + opts[OPT_D].subopt_params[D_SWIDTH].value = > + dswidth; > break; > case D_SU: > dsu = getnum(value, &opts[OPT_D], D_SU); > + opts[OPT_D].subopt_params[D_SU].value = > + dsu; > break; > case D_SW: > dsw = getnum(value, &opts[OPT_D], D_SW); > + opts[OPT_D].subopt_params[D_SW].value = > + dsw; > break; > case D_NOALIGN: > nodsflag = getnum(value, &opts[OPT_D], > D_NOALIGN); > + opts[OPT_D].subopt_params[D_NOALIGN].value = > + nodsflag; > break; > case D_SECTLOG: > sectorlog = getnum(value, &opts[OPT_D], > D_SECTLOG); > sectorsize = 1 << sectorlog; > slflag = 1; > + opts[OPT_D].subopt_params[D_SECTSIZE].value = > + sectorsize; > + opts[OPT_D].subopt_params[D_SECTLOG].value = > + sectorlog; > break; > case D_SECTSIZE: > sectorsize = getnum(value, &opts[OPT_D], > @@ -1637,6 +1675,10 @@ main( > sectorlog = > libxfs_highbit32(sectorsize); > ssflag = 1; > + opts[OPT_D].subopt_params[D_SECTSIZE].value = > + sectorsize; > + opts[OPT_D].subopt_params[D_SECTLOG].value = > + sectorlog; > break; > case D_RTINHERIT: > c = getnum(value, &opts[OPT_D], > @@ -1644,18 +1686,24 @@ main( > if (c) > fsx.fsx_xflags |= > XFS_DIFLAG_RTINHERIT; > + opts[OPT_D].subopt_params[D_RTINHERIT].value = > + c; > break; > case D_PROJINHERIT: > fsx.fsx_projid = getnum(value, &opts[OPT_D], > D_PROJINHERIT); > fsx.fsx_xflags |= > XFS_DIFLAG_PROJINHERIT; > + opts[OPT_D].subopt_params[D_PROJINHERIT].value = > + fsx.fsx_projid; > break; > case D_EXTSZINHERIT: > fsx.fsx_extsize = getnum(value, &opts[OPT_D], > D_EXTSZINHERIT); > fsx.fsx_xflags |= > XFS_DIFLAG_EXTSZINHERIT; > + opts[OPT_D].subopt_params[D_EXTSZINHERIT].value = > + fsx.fsx_extsize; > break; > default: > unknown('d', value); > @@ -1673,43 +1721,64 @@ main( > sb_feat.inode_align = getnum(value, > &opts[OPT_I], > I_ALIGN); > + opts[OPT_I].subopt_params[I_ALIGN].value = > + sb_feat.inode_align; > break; > case I_LOG: > inodelog = getnum(value, &opts[OPT_I], > I_LOG); > isize = 1 << inodelog; > ilflag = 1; > + opts[OPT_I].subopt_params[I_SIZE].value = > + isize; > + opts[OPT_I].subopt_params[I_LOG].value = > + inodelog; > break; > case I_MAXPCT: > imaxpct = getnum(value, &opts[OPT_I], > I_MAXPCT); > imflag = 1; > + opts[OPT_I].subopt_params[I_MAXPCT].value = > + imaxpct; > break; > case I_PERBLOCK: > inopblock = getnum(value, &opts[OPT_I], > I_PERBLOCK); > ipflag = 1; > + opts[OPT_I].subopt_params[I_PERBLOCK].value = > + inopblock; > break; > case I_SIZE: > isize = getnum(value, &opts[OPT_I], > I_SIZE); > inodelog = libxfs_highbit32(isize); > isflag = 1; > + opts[OPT_I].subopt_params[I_SIZE].value = > + isize; > + opts[OPT_I].subopt_params[I_LOG].value = > + inodelog; > break; > case I_ATTR: > sb_feat.attr_version = > + > getnum(value, &opts[OPT_I], > I_ATTR); > + opts[OPT_I].subopt_params[I_ATTR].value = > + sb_feat.attr_version; > break; > case I_PROJID32BIT: > sb_feat.projid16bit = > !getnum(value, &opts[OPT_I], > I_PROJID32BIT); > + opts[OPT_I].subopt_params[I_PROJID32BIT].value = > + sb_feat.projid16bit; > break; > case I_SPINODES: > sb_feat.spinodes = getnum(value, > &opts[OPT_I], > I_SPINODES); > + opts[OPT_I].subopt_params[I_SPINODES].value = > + sb_feat.spinodes; > break; > default: > unknown('i', value); > @@ -1727,24 +1796,34 @@ main( > logagno = getnum(value, &opts[OPT_L], > L_AGNUM); > laflag = 1; > + opts[OPT_L].subopt_params[L_AGNUM].value = > + logagno; > break; > case L_FILE: > xi.lisfile = getnum(value, &opts[OPT_L], > L_FILE); > + opts[OPT_L].subopt_params[L_FILE].value = > + xi.lisfile; > break; > case L_INTERNAL: > loginternal = getnum(value, &opts[OPT_L], > L_INTERNAL); > liflag = 1; > + opts[OPT_L].subopt_params[L_INTERNAL].value = > + loginternal; > break; > case L_SU: > lsu = getnum(value, &opts[OPT_L], L_SU); > lsuflag = 1; > + opts[OPT_L].subopt_params[L_SU].value = > + lsu; > break; > case L_SUNIT: > lsunit = getnum(value, &opts[OPT_L], > L_SUNIT); > lsunitflag = 1; > + opts[OPT_L].subopt_params[L_SUNIT].value = > + lsunit; > break; > case L_NAME: > case L_DEV: > @@ -1753,22 +1832,32 @@ main( > xi.logname = logfile; > ldflag = 1; > loginternal = 0; > + opts[OPT_L].subopt_params[L_NAME].value = 1; > + opts[OPT_L].subopt_params[L_DEV].value = 1; > break; > case L_VERSION: > sb_feat.log_version = > getnum(value, &opts[OPT_L], > L_VERSION); > lvflag = 1; > + opts[OPT_L].subopt_params[L_VERSION].value = > + sb_feat.log_version; > break; > case L_SIZE: > logbytes = getnum(value, &opts[OPT_L], > L_SIZE); > + opts[OPT_L].subopt_params[L_SIZE].value = > + logbytes; > break; > case L_SECTLOG: > lsectorlog = getnum(value, &opts[OPT_L], > L_SECTLOG); > lsectorsize = 1 << lsectorlog; > lslflag = 1; > + opts[OPT_L].subopt_params[L_SECTSIZE].value = > + lsectorsize; > + opts[OPT_L].subopt_params[L_SECTLOG].value = > + lsectorlog; > break; > case L_SECTSIZE: > lsectorsize = getnum(value, &opts[OPT_L], > @@ -1776,11 +1865,17 @@ main( > lsectorlog = > libxfs_highbit32(lsectorsize); > lssflag = 1; > + opts[OPT_L].subopt_params[L_SECTSIZE].value = > + lsectorsize; > + opts[OPT_L].subopt_params[L_SECTLOG].value = > + lsectorlog; > break; > case L_LAZYSBCNTR: > sb_feat.lazy_sb_counters = > getnum(value, &opts[OPT_L], > L_LAZYSBCNTR); > + opts[OPT_L].subopt_params[L_LAZYSBCNTR].value = > + sb_feat.lazy_sb_counters; > break; > default: > unknown('l', value); > @@ -1805,20 +1900,27 @@ main( > M_CRC); > if (sb_feat.crcs_enabled) > sb_feat.dirftype = true; > + opts[OPT_M].subopt_params[M_CRC].value = > + sb_feat.crcs_enabled; > break; > case M_FINOBT: > sb_feat.finobt = getnum( > value, &opts[OPT_M], M_FINOBT); > + opts[OPT_M].subopt_params[M_FINOBT].value = > + sb_feat.finobt; > break; > case M_UUID: > if (!value || *value == '\0') > reqval('m', subopts, M_UUID); > if (platform_uuid_parse(value, &uuid)) > illegal(optarg, "m uuid"); > + opts[OPT_M].subopt_params[M_UUID].value = 1; > break; > case M_RMAPBT: > sb_feat.rmapbt = getnum( > value, &opts[OPT_M], M_RMAPBT); > + opts[OPT_M].subopt_params[M_RMAPBT].value = trailing whitespace above ^^^ > + sb_feat.rmapbt; > break; > case M_REFLINK: > sb_feat.reflink = getnum( > @@ -1841,6 +1943,10 @@ main( > N_LOG); > dirblocksize = 1 << dirblocklog; > nlflag = 1; > + opts[OPT_N].subopt_params[N_SIZE].value = > + dirblocksize; > + opts[OPT_N].subopt_params[N_LOG].value = > + dirblocklog; > break; > case N_SIZE: > dirblocksize = getnum(value, &opts[OPT_N], > @@ -1848,6 +1954,10 @@ main( > dirblocklog = > libxfs_highbit32(dirblocksize); > nsflag = 1; > + opts[OPT_N].subopt_params[N_SIZE].value = > + dirblocksize; > + opts[OPT_N].subopt_params[N_LOG].value = > + dirblocklog; > break; > case N_VERSION: > value = getstr(value, &opts[OPT_N], > @@ -1861,10 +1971,14 @@ main( > N_VERSION); > } > nvflag = 1; > + opts[OPT_N].subopt_params[N_VERSION].value = > + sb_feat.dir_version; > break; > case N_FTYPE: > sb_feat.dirftype = getnum(value, &opts[OPT_N], > N_FTYPE); > + opts[OPT_N].subopt_params[N_FTYPE].value = > + sb_feat.dirftype; > break; > default: > unknown('n', value); > @@ -1895,23 +2009,33 @@ main( > case R_EXTSIZE: > rtextbytes = getnum(value, &opts[OPT_R], > R_EXTSIZE); > + opts[OPT_R].subopt_params[R_EXTSIZE].value = > + rtextbytes; > break; > case R_FILE: > xi.risfile = getnum(value, &opts[OPT_R], > R_FILE); > + opts[OPT_R].subopt_params[R_FILE].value = > + xi.risfile; > break; > case R_NAME: > case R_DEV: > xi.rtname = getstr(value, &opts[OPT_R], > R_NAME); > + opts[OPT_R].subopt_params[R_NAME].value = 1; > + opts[OPT_R].subopt_params[R_DEV].value = 1; > break; > case R_SIZE: > rtbytes = getnum(value, &opts[OPT_R], > R_SIZE); > + opts[OPT_R].subopt_params[R_SIZE].value = > + rtbytes; > break; > case R_NOALIGN: > norsflag = getnum(value, &opts[OPT_R], > R_NOALIGN); > + opts[OPT_R].subopt_params[R_NOALIGN].value = > + norsflag; > break; > default: > unknown('r', value); > @@ -1936,6 +2060,10 @@ main( > sectorsize = 1 << sectorlog; > lsectorsize = sectorsize; > lslflag = slflag = 1; > + opts[OPT_S].subopt_params[S_LOG].value = > + sectorsize; > + opts[OPT_S].subopt_params[S_SECTLOG].value = > + sectorsize; > break; > case S_SIZE: > case S_SECTSIZE: > @@ -1949,6 +2077,10 @@ main( > libxfs_highbit32(sectorsize); > lsectorlog = sectorlog; > lssflag = ssflag = 1; > + opts[OPT_S].subopt_params[S_SIZE].value = > + sectorlog; > + opts[OPT_S].subopt_params[S_SECTSIZE].value = > + sectorlog; > break; > default: > unknown('s', value); > -- > 2.8.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html