]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: factor log subopts parser
authorDave Chinner <dchinner@redhat.com>
Wed, 6 Dec 2017 23:14:27 +0000 (17:14 -0600)
committerEric Sandeen <sandeen@redhat.com>
Wed, 6 Dec 2017 23:14:27 +0000 (17:14 -0600)
Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
mkfs/xfs_mkfs.c

index 2292362b49e4f346ed32c892439f25c5063b821b..a4f38048803317efa5e939af07be9dcd080085b2 100644 (file)
@@ -1622,6 +1622,48 @@ log_opts_parser(
        char                    *value,
        struct cli_params       *cli)
 {
+       int                     lsectorlog;
+
+       switch (subopt) {
+       case L_AGNUM:
+               cli->logagno = getnum(value, &lopts, L_AGNUM);
+               break;
+       case L_FILE:
+               cli->xi->lisfile = getnum(value, &lopts, L_FILE);
+               break;
+       case L_INTERNAL:
+               cli->loginternal = getnum(value, &lopts, L_INTERNAL);
+               break;
+       case L_SU:
+               cli->lsu = getstr(value, &lopts, L_SU);
+               break;
+       case L_SUNIT:
+               cli->lsunit = getnum(value, &lopts, L_SUNIT);
+               break;
+       case L_NAME:
+       case L_DEV:
+               cli->xi->logname = getstr(value, &lopts, L_NAME);
+               cli->loginternal = 0;
+               break;
+       case L_VERSION:
+               cli->sb_feat.log_version = getnum(value, &lopts, L_VERSION);
+               break;
+       case L_SIZE:
+               cli->logsize = getstr(value, &lopts, L_SIZE);
+               break;
+       case L_SECTLOG:
+               lsectorlog = getnum(value, &lopts, L_SECTLOG);
+               cli->lsectorsize = 1 << lsectorlog;
+               break;
+       case L_SECTSIZE:
+               cli->lsectorsize = getnum(value, &lopts, L_SECTSIZE);
+               break;
+       case L_LAZYSBCNTR:
+               cli->sb_feat.lazy_sb_counters = getnum(value, &lopts, L_LAZYSBCNTR);
+               break;
+       default:
+               return -EINVAL;
+       }
        return 0;
 }
 
@@ -1925,70 +1967,31 @@ main(
                        /* end temp don't break code */
                        break;
                case 'l':
-                       p = optarg;
-                       while (*p != '\0') {
-                               char    **subopts = (char **)lopts.subopts;
-                               char    *value;
+                       parse_subopts(c, optarg, &cli);
 
-                               switch (getsubopt(&p, subopts, &value)) {
-                               case L_AGNUM:
-                                       logagno = getnum(value, &lopts, L_AGNUM);
-                                       laflag = 1;
-                                       break;
-                               case L_FILE:
-                                       xi.lisfile = getnum(value, &lopts,
-                                                           L_FILE);
-                                       break;
-                               case L_INTERNAL:
-                                       loginternal = getnum(value, &lopts,
-                                                            L_INTERNAL);
-                                       liflag = 1;
-                                       break;
-                               case L_SU:
-                                       lsu = getnum(value, &lopts, L_SU);
-                                       lsuflag = 1;
-                                       break;
-                               case L_SUNIT:
-                                       lsunit = getnum(value, &lopts, L_SUNIT);
-                                       lsunitflag = 1;
-                                       break;
-                               case L_NAME:
-                               case L_DEV:
-                                       logfile = getstr(value, &lopts, L_NAME);
-                                       xi.logname = logfile;
-                                       ldflag = 1;
-                                       loginternal = 0;
-                                       break;
-                               case L_VERSION:
-                                       sb_feat.log_version =
-                                               getnum(value, &lopts, L_VERSION);
-                                       lvflag = 1;
-                                       break;
-                               case L_SIZE:
-                                       logsize = getstr(value, &lopts, L_SIZE);
-                                       break;
-                               case L_SECTLOG:
-                                       lsectorlog = getnum(value, &lopts,
-                                                           L_SECTLOG);
-                                       lsectorsize = 1 << lsectorlog;
-                                       lslflag = 1;
-                                       break;
-                               case L_SECTSIZE:
-                                       lsectorsize = getnum(value, &lopts,
-                                                            L_SECTSIZE);
-                                       lsectorlog =
-                                               libxfs_highbit32(lsectorsize);
-                                       lssflag = 1;
-                                       break;
-                               case L_LAZYSBCNTR:
-                                       sb_feat.lazy_sb_counters =
-                                                       getnum(value, &lopts,
-                                                              L_LAZYSBCNTR);
-                                       break;
-                               default:
-                                       unknown('l', value);
-                               }
+                       /* temp don't break code */
+                       logagno = cli.logagno;
+                       loginternal = cli.loginternal;
+                       logfile = xi.logname;
+                       logsize = cli.logsize;
+                       lsectorsize = cli.lsectorsize;
+                       lsectorlog = libxfs_highbit32(lsectorsize);
+
+                       lsunit = cli.lsunit;
+                       lsunitflag = cli_opt_set(&lopts, L_SUNIT);
+                       if (cli_opt_set(&lopts, L_SU)) {
+                               lsu = getnum(cli.lsu, &lopts, L_SU);
+                               lsuflag = 1;
                        }
+
+                       laflag = cli_opt_set(&lopts, L_AGNUM);
+                       liflag = cli_opt_set(&lopts, L_INTERNAL);
+                       ldflag = cli_opt_set(&lopts, L_NAME) ||
+                                cli_opt_set(&lopts, L_DEV);
+                       lvflag = cli_opt_set(&lopts, L_VERSION);
+                       lslflag = cli_opt_set(&lopts, L_SECTLOG);
+                       lssflag = cli_opt_set(&lopts, L_SECTSIZE);
+                       /* end temp don't break code */
                        break;
                case 'L':
                        if (strlen(optarg) > sizeof(sbp->sb_fname))