]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: convert subopt name, val pairs to enums and declared arrays
authorDave Chinner <dchinner@redhat.com>
Wed, 3 Jan 2018 20:10:10 +0000 (14:10 -0600)
committerEric Sandeen <sandeen@redhat.com>
Wed, 3 Jan 2018 20:10:10 +0000 (14:10 -0600)
Replace the nasty #define + implicit array index definitions with
pre-declared enums and index specific name array declarations.

This cleans up the code quite a bit and the pre-declaration of the
enums allows tables to use indexes from other tables in things like
conflict specifications.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
mkfs/xfs_mkfs.c

index 1825ba85a42d4171fb329ee13da99b201fee7262..dc1a6aacf587c7180f2110f5be174a67a39ddf2f 100644 (file)
 unsigned int           blocksize;
 unsigned int           sectorsize;
 
-#define MAX_SUBOPTS    17
+/*
+ * Enums for each CLI parameter type are declared first so we can calculate the
+ * maximum array size needed to hold them automatically.
+ */
+enum {
+       B_LOG = 0,
+       B_SIZE,
+       B_MAX_OPTS,
+};
+
+enum {
+       D_AGCOUNT = 0,
+       D_FILE,
+       D_NAME,
+       D_SIZE,
+       D_SUNIT,
+       D_SWIDTH,
+       D_AGSIZE,
+       D_SU,
+       D_SW,
+       D_SECTLOG,
+       D_SECTSIZE,
+       D_NOALIGN,
+       D_RTINHERIT,
+       D_PROJINHERIT,
+       D_EXTSZINHERIT,
+       D_COWEXTSIZE,
+       D_MAX_OPTS,
+};
+
+enum {
+       I_ALIGN = 0,
+       I_LOG,
+       I_MAXPCT,
+       I_PERBLOCK,
+       I_SIZE,
+       I_ATTR,
+       I_PROJID32BIT,
+       I_SPINODES,
+       I_MAX_OPTS,
+};
+
+enum {
+       L_AGNUM = 0,
+       L_INTERNAL,
+       L_SIZE,
+       L_VERSION,
+       L_SUNIT,
+       L_SU,
+       L_DEV,
+       L_SECTLOG,
+       L_SECTSIZE,
+       L_FILE,
+       L_NAME,
+       L_LAZYSBCNTR,
+       L_MAX_OPTS,
+};
+
+enum {
+       N_LOG = 0,
+       N_SIZE,
+       N_VERSION,
+       N_FTYPE,
+       N_MAX_OPTS,
+};
+
+enum {
+       R_EXTSIZE = 0,
+       R_SIZE,
+       R_DEV,
+       R_FILE,
+       R_NAME,
+       R_NOALIGN,
+       R_MAX_OPTS,
+};
+
+enum {
+       S_LOG = 0,
+       S_SECTLOG,
+       S_SIZE,
+       S_SECTSIZE,
+       S_MAX_OPTS,
+};
+
+enum {
+       M_CRC = 0,
+       M_FINOBT,
+       M_UUID,
+       M_RMAPBT,
+       M_REFLINK,
+       M_MAX_OPTS,
+};
+
+/* Just define the max options array size manually right now */
+#define MAX_SUBOPTS    D_MAX_OPTS
+
 #define SUBOPT_NEEDS_VAL       (-1LL)
 #define MAX_CONFLICTS  8
 #define LAST_CONFLICT  (-1)
@@ -138,11 +233,8 @@ struct opt_params {
 struct opt_params bopts = {
        .name = 'b',
        .subopts = {
-#define        B_LOG           0
-               "log",
-#define        B_SIZE          1
-               "size",
-               NULL
+               [B_LOG] = "log",
+               [B_SIZE] = "size",
        },
        .subopt_params = {
                { .index = B_LOG,
@@ -167,39 +259,22 @@ struct opt_params bopts = {
 struct opt_params dopts = {
        .name = 'd',
        .subopts = {
-#define        D_AGCOUNT       0
-               "agcount",
-#define        D_FILE          1
-               "file",
-#define        D_NAME          2
-               "name",
-#define        D_SIZE          3
-               "size",
-#define D_SUNIT                4
-               "sunit",
-#define D_SWIDTH       5
-               "swidth",
-#define D_AGSIZE       6
-               "agsize",
-#define D_SU           7
-               "su",
-#define D_SW           8
-               "sw",
-#define D_SECTLOG      9
-               "sectlog",
-#define D_SECTSIZE     10
-               "sectsize",
-#define D_NOALIGN      11
-               "noalign",
-#define D_RTINHERIT    12
-               "rtinherit",
-#define D_PROJINHERIT  13
-               "projinherit",
-#define D_EXTSZINHERIT 14
-               "extszinherit",
-#define D_COWEXTSIZE   15
-               "cowextsize",
-               NULL
+               [D_AGCOUNT] = "agcount",
+               [D_FILE] = "file",
+               [D_NAME] = "name",
+               [D_SIZE] = "size",
+               [D_SUNIT] = "sunit",
+               [D_SWIDTH] = "swidth",
+               [D_AGSIZE] = "agsize",
+               [D_SU] = "su",
+               [D_SW] = "sw",
+               [D_SECTLOG] = "sectlog",
+               [D_SECTSIZE] = "sectsize",
+               [D_NOALIGN] = "noalign",
+               [D_RTINHERIT] = "rtinherit",
+               [D_PROJINHERIT] = "projinherit",
+               [D_EXTSZINHERIT] = "extszinherit",
+               [D_COWEXTSIZE] = "cowextsize",
        },
        .subopt_params = {
                { .index = D_AGCOUNT,
@@ -328,23 +403,14 @@ struct opt_params dopts = {
 struct opt_params iopts = {
        .name = 'i',
        .subopts = {
-#define        I_ALIGN         0
-               "align",
-#define        I_LOG           1
-               "log",
-#define        I_MAXPCT        2
-               "maxpct",
-#define        I_PERBLOCK      3
-               "perblock",
-#define        I_SIZE          4
-               "size",
-#define        I_ATTR          5
-               "attr",
-#define        I_PROJID32BIT   6
-               "projid32bit",
-#define I_SPINODES     7
-               "sparse",
-               NULL
+               [I_ALIGN] = "align",
+               [I_LOG] = "log",
+               [I_MAXPCT] = "maxpct",
+               [I_PERBLOCK] = "perblock",
+               [I_SIZE] = "size",
+               [I_ATTR] = "attr",
+               [I_PROJID32BIT] = "projid32bit",
+               [I_SPINODES] = "sparse",
        },
        .subopt_params = {
                { .index = I_ALIGN,
@@ -409,31 +475,18 @@ struct opt_params iopts = {
 struct opt_params lopts = {
        .name = 'l',
        .subopts = {
-#define        L_AGNUM         0
-               "agnum",
-#define        L_INTERNAL      1
-               "internal",
-#define        L_SIZE          2
-               "size",
-#define L_VERSION      3
-               "version",
-#define L_SUNIT                4
-               "sunit",
-#define L_SU           5
-               "su",
-#define L_DEV          6
-               "logdev",
-#define        L_SECTLOG       7
-               "sectlog",
-#define        L_SECTSIZE      8
-               "sectsize",
-#define        L_FILE          9
-               "file",
-#define        L_NAME          10
-               "name",
-#define        L_LAZYSBCNTR    11
-               "lazy-count",
-               NULL
+               [L_AGNUM] = "agnum",
+               [L_INTERNAL] = "internal",
+               [L_SIZE] = "size",
+               [L_VERSION] = "version",
+               [L_SUNIT] = "sunit",
+               [L_SU] = "su",
+               [L_DEV] = "logdev",
+               [L_SECTLOG] = "sectlog",
+               [L_SECTSIZE] = "sectsize",
+               [L_FILE] = "file",
+               [L_NAME] = "name",
+               [L_LAZYSBCNTR] = "lazy-count",
        },
        .subopt_params = {
                { .index = L_AGNUM,
@@ -530,15 +583,10 @@ struct opt_params lopts = {
 struct opt_params nopts = {
        .name = 'n',
        .subopts = {
-#define        N_LOG           0
-               "log",
-#define        N_SIZE          1
-               "size",
-#define        N_VERSION       2
-               "version",
-#define        N_FTYPE         3
-               "ftype",
-       NULL,
+               [N_LOG] = "log",
+               [N_SIZE] = "size",
+               [N_VERSION] = "version",
+               [N_FTYPE] = "ftype",
        },
        .subopt_params = {
                { .index = N_LOG,
@@ -575,19 +623,12 @@ struct opt_params nopts = {
 struct opt_params ropts = {
        .name = 'r',
        .subopts = {
-#define        R_EXTSIZE       0
-               "extsize",
-#define        R_SIZE          1
-               "size",
-#define        R_DEV           2
-               "rtdev",
-#define        R_FILE          3
-               "file",
-#define        R_NAME          4
-               "name",
-#define R_NOALIGN      5
-               "noalign",
-               NULL
+               [R_EXTSIZE] = "extsize",
+               [R_SIZE] = "size",
+               [R_DEV] = "rtdev",
+               [R_FILE] = "file",
+               [R_NAME] = "name",
+               [R_NOALIGN] = "noalign",
        },
        .subopt_params = {
                { .index = R_EXTSIZE,
@@ -630,15 +671,10 @@ struct opt_params ropts = {
 struct opt_params sopts = {
        .name = 's',
        .subopts = {
-#define        S_LOG           0
-               "log",
-#define        S_SECTLOG       1
-               "sectlog",
-#define        S_SIZE          2
-               "size",
-#define        S_SECTSIZE      3
-               "sectsize",
-               NULL
+               [S_LOG] = "log",
+               [S_SECTLOG] = "sectlog",
+               [S_SIZE] = "size",
+               [S_SECTSIZE] = "sectsize",
        },
        .subopt_params = {
                { .index = S_LOG,
@@ -683,17 +719,11 @@ struct opt_params sopts = {
 struct opt_params mopts = {
        .name = 'm',
        .subopts = {
-#define        M_CRC           0
-               "crc",
-#define M_FINOBT       1
-               "finobt",
-#define M_UUID         2
-               "uuid",
-#define M_RMAPBT       3
-               "rmapbt",
-#define M_REFLINK      4
-               "reflink",
-               NULL
+               [M_CRC] = "crc",
+               [M_FINOBT] = "finobt",
+               [M_UUID] = "uuid",
+               [M_RMAPBT] = "rmapbt",
+               [M_REFLINK] = "reflink",
        },
        .subopt_params = {
                { .index = M_CRC,