@@ -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
@@ -1543,12 +1550,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);
@@ -1567,47 +1582,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],
@@ -1615,6 +1653,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],
@@ -1622,18 +1664,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);
@@ -1652,43 +1700,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);
@@ -1707,24 +1776,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:
@@ -1733,22 +1812,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],
@@ -1756,11 +1845,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);
@@ -1786,10 +1881,14 @@ 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')
@@ -1797,6 +1896,7 @@ main(
if (platform_uuid_parse(value, &uuid))
illegal(optarg, "m uuid");
break;
+ opts[OPT_M].subopt_params[M_UUID].value = 1;
default:
unknown('m', value);
}
@@ -1815,6 +1915,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],
@@ -1822,6 +1926,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],
@@ -1835,10 +1943,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);
@@ -1870,23 +1982,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);
@@ -1912,6 +2034,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:
@@ -1925,6 +2051,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);
Add a new field into opt_params: value, which is filled with user input. Signed-off-by: Jan Tulak <jtulak@redhat.com> --- mkfs/xfs_mkfs.c | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+)