When commands that are symlinks to fsck.f2fs binary are invoked without 
any parameters, now they show their own usage communicate instead of 
fsck.f2fs help message in all cases.

---
 fsck/main.c | 477 +++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 250 insertions(+), 227 deletions(-)

diff --git a/fsck/main.c b/fsck/main.c
index 6c94a70..adc8675 100644
--- a/fsck/main.c
+++ b/fsck/main.c
@@ -108,6 +108,17 @@ void f2fs_parse_options(int argc, char *argv[])
        char *prog = basename(argv[0]);
        int err = NOERROR;
 
+       if (!strcmp("fsck.f2fs", prog))
+               c.func = FSCK;
+       else if (!strcmp("dump.f2fs", prog))
+               c.func = DUMP;
+       else if (!strcmp("defrag.f2fs", prog))
+               c.func = DEFRAG;
+       else if (!strcmp("resize.f2fs", prog))
+               c.func = RESIZE;
+       else if (!strcmp("sload.f2fs", prog))
+               c.func = SLOAD;
+
        if (argc < 2) {
                MSG(0, "\tError: Device not specified\n");
                error_out();
@@ -115,261 +126,273 @@ void f2fs_parse_options(int argc, char *argv[])
        c.devices[0].path = strdup(argv[argc - 1]);
        argv[argc-- - 1] = 0;
 
-       if (!strcmp("fsck.f2fs", prog)) {
-               const char *option_string = ":ad:fp:t";
+       switch (c.func) {
+       case FSCK:
+               {
+                       const char *option_string = ":ad:fp:t";
 
-               c.func = FSCK;
-               while ((option = getopt(argc, argv, option_string)) != EOF) {
-                       switch (option) {
-                       case 'a':
-                               c.auto_fix = 1;
-                               MSG(0, "Info: Fix the reported corruption.\n");
-                               break;
-                       case 'p':
-                               /* preen mode has different levels:
-                                *  0: default level, the same as -a
-                                *  1: check meta
-                                */
-                               if (optarg[0] == '-') {
-                                       c.preen_mode = PREEN_MODE_0;
-                                       optind--;
-                                       break;
-                               } else if (!is_digits(optarg)) {
-                                       err = EWRONG_OPT;
-                                       break;
-                               }
-                               c.preen_mode = atoi(optarg);
-                               if (c.preen_mode < 0)
-                                       c.preen_mode = PREEN_MODE_0;
-                               else if (c.preen_mode >= PREEN_MODE_MAX)
-                                       c.preen_mode = PREEN_MODE_MAX - 1;
-                               if (c.preen_mode == PREEN_MODE_0)
+                       while ((option = getopt(argc, argv, option_string)) != 
EOF) {
+                               switch (option) {
+                               case 'a':
                                        c.auto_fix = 1;
-                               MSG(0, "Info: Fix the reported corruption in "
-                                       "preen mode %d\n", c.preen_mode);
-                               break;
-                       case 'd':
-                               if (optarg[0] == '-') {
-                                       err = ENEED_ARG;
+                                       MSG(0, "Info: Fix the reported 
corruption.\n");
                                        break;
-                               } else if (!is_digits(optarg)) {
-                                       err = EWRONG_OPT;
+                               case 'p':
+                                       /* preen mode has different levels:
+                                       *  0: default level, the same as -a
+                                       *  1: check meta
+                                       */
+                                       if (optarg[0] == '-') {
+                                               c.preen_mode = PREEN_MODE_0;
+                                               optind--;
+                                               break;
+                                       } else if (!is_digits(optarg)) {
+                                               err = EWRONG_OPT;
+                                               break;
+                                       }
+                                       c.preen_mode = atoi(optarg);
+                                       if (c.preen_mode < 0)
+                                               c.preen_mode = PREEN_MODE_0;
+                                       else if (c.preen_mode >= PREEN_MODE_MAX)
+                                               c.preen_mode = PREEN_MODE_MAX - 
1;
+                                       if (c.preen_mode == PREEN_MODE_0)
+                                               c.auto_fix = 1;
+                                       MSG(0, "Info: Fix the reported 
corruption in "
+                                               "preen mode %d\n", 
c.preen_mode);
+                                       break;
+                               case 'd':
+                                       if (optarg[0] == '-') {
+                                               err = ENEED_ARG;
+                                               break;
+                                       } else if (!is_digits(optarg)) {
+                                               err = EWRONG_OPT;
+                                               break;
+                                       }
+                                       c.dbg_lv = atoi(optarg);
+                                       MSG(0, "Info: Debug level = %d\n", 
c.dbg_lv);
+                                       break;
+                               case 'f':
+                                       c.fix_on = 1;
+                                       MSG(0, "Info: Force to fix 
corruption\n");
+                                       break;
+                               case 't':
+                                       c.dbg_lv = -1;
                                        break;
-                               }
-                               c.dbg_lv = atoi(optarg);
-                               MSG(0, "Info: Debug level = %d\n", c.dbg_lv);
-                               break;
-                       case 'f':
-                               c.fix_on = 1;
-                               MSG(0, "Info: Force to fix corruption\n");
-                               break;
-                       case 't':
-                               c.dbg_lv = -1;
-                               break;
 
 
-                       case ':':
-                               if (optopt == 'p') {
-                                       MSG(0, "Info: Use default preen 
mode\n");
-                                       c.preen_mode = PREEN_MODE_0;
-                                       c.auto_fix = 1;
-                               } else {
+                               case ':':
+                                       if (optopt == 'p') {
+                                               MSG(0, "Info: Use default preen 
mode\n");
+                                               c.preen_mode = PREEN_MODE_0;
+                                               c.auto_fix = 1;
+                                       } else {
+                                               option = optopt;
+                                               err = ENEED_ARG;
+                                               break;
+                                       }
+                                       break;
+                               case '?':
                                        option = optopt;
-                                       err = ENEED_ARG;
+                               default:
+                                       err = EUNKNOWN_OPT;
                                        break;
                                }
-                               break;
-                       case '?':
-                               option = optopt;
-                       default:
-                               err = EUNKNOWN_OPT;
-                               break;
+                               if (err != NOERROR)
+                                       break;
                        }
-                       if (err != NOERROR)
-                               break;
                }
-       } else if (!strcmp("dump.f2fs", prog)) {
-               const char *option_string = "d:i:n:s:a:b:";
-               static struct dump_option dump_opt = {
-                       .nid = 0,       /* default root ino */
-                       .start_nat = -1,
-                       .end_nat = -1,
-                       .start_sit = -1,
-                       .end_sit = -1,
-                       .start_ssa = -1,
-                       .end_ssa = -1,
-                       .blk_addr = -1,
-               };
-
-               c.func = DUMP;
-               while ((option = getopt(argc, argv, option_string)) != EOF) {
-                       int ret = 0;
-
-                       switch (option) {
-                       case 'd':
-                               if (!is_digits(optarg)) {
-                                       err = EWRONG_OPT;
+               break;
+       case DUMP:
+               {
+                       const char *option_string = "d:i:n:s:a:b:";
+                       static struct dump_option dump_opt = {
+                               .nid = 0,       /* default root ino */
+                               .start_nat = -1,
+                               .end_nat = -1,
+                               .start_sit = -1,
+                               .end_sit = -1,
+                               .start_ssa = -1,
+                               .end_ssa = -1,
+                               .blk_addr = -1,
+                       };
+
+                       while ((option = getopt(argc, argv, option_string)) != 
EOF) {
+                               int ret = 0;
+
+                               switch (option) {
+                               case 'd':
+                                       if (!is_digits(optarg)) {
+                                               err = EWRONG_OPT;
+                                               break;
+                                       }
+                                       c.dbg_lv = atoi(optarg);
+                                       MSG(0, "Info: Debug level = %d\n",
+                                                               c.dbg_lv);
+                                       break;
+                               case 'i':
+                                       if (strncmp(optarg, "0x", 2))
+                                               ret = sscanf(optarg, "%d",
+                                                               &dump_opt.nid);
+                                       else
+                                               ret = sscanf(optarg, "%x",
+                                                               &dump_opt.nid);
+                                       break;
+                               case 'n':
+                                       ret = sscanf(optarg, "%d~%d",
+                                                               
&dump_opt.start_nat,
+                                                               
&dump_opt.end_nat);
+                                       break;
+                               case 's':
+                                       ret = sscanf(optarg, "%d~%d",
+                                                               
&dump_opt.start_sit,
+                                                               
&dump_opt.end_sit);
+                                       break;
+                               case 'a':
+                                       ret = sscanf(optarg, "%d~%d",
+                                                               
&dump_opt.start_ssa,
+                                                               
&dump_opt.end_ssa);
+                                       break;
+                               case 'b':
+                                       if (strncmp(optarg, "0x", 2))
+                                               ret = sscanf(optarg, "%d",
+                                                               
&dump_opt.blk_addr);
+                                       else
+                                               ret = sscanf(optarg, "%x",
+                                                               
&dump_opt.blk_addr);
+                                       break;
+                               default:
+                                       err = EUNKNOWN_OPT;
                                        break;
                                }
-                               c.dbg_lv = atoi(optarg);
-                               MSG(0, "Info: Debug level = %d\n",
-                                                       c.dbg_lv);
-                               break;
-                       case 'i':
-                               if (strncmp(optarg, "0x", 2))
-                                       ret = sscanf(optarg, "%d",
-                                                       &dump_opt.nid);
-                               else
-                                       ret = sscanf(optarg, "%x",
-                                                       &dump_opt.nid);
-                               break;
-                       case 'n':
-                               ret = sscanf(optarg, "%d~%d",
-                                                       &dump_opt.start_nat,
-                                                       &dump_opt.end_nat);
-                               break;
-                       case 's':
-                               ret = sscanf(optarg, "%d~%d",
-                                                       &dump_opt.start_sit,
-                                                       &dump_opt.end_sit);
-                               break;
-                       case 'a':
-                               ret = sscanf(optarg, "%d~%d",
-                                                       &dump_opt.start_ssa,
-                                                       &dump_opt.end_ssa);
-                               break;
-                       case 'b':
-                               if (strncmp(optarg, "0x", 2))
-                                       ret = sscanf(optarg, "%d",
-                                                       &dump_opt.blk_addr);
-                               else
-                                       ret = sscanf(optarg, "%x",
-                                                       &dump_opt.blk_addr);
-                               break;
-                       default:
-                               err = EUNKNOWN_OPT;
-                               break;
+                               ASSERT(ret >= 0);
+                               if (err != NOERROR)
+                                       break;
                        }
-                       ASSERT(ret >= 0);
-                       if (err != NOERROR)
-                               break;
-               }
-
-               c.private = &dump_opt;
-       } else if (!strcmp("defrag.f2fs", prog)) {
-               const char *option_string = "d:s:l:t:i";
 
-               c.func = DEFRAG;
-               while ((option = getopt(argc, argv, option_string)) != EOF) {
-                       int ret = 0;
-
-                       switch (option) {
-                       case 'd':
-                               if (!is_digits(optarg)) {
-                                       err = EWRONG_OPT;
+                       c.private = &dump_opt;
+               }
+               break;
+       case DEFRAG:
+               {
+                       const char *option_string = "d:s:l:t:i";
+
+                       while ((option = getopt(argc, argv, option_string)) != 
EOF) {
+                               int ret = 0;
+
+                               switch (option) {
+                               case 'd':
+                                       if (!is_digits(optarg)) {
+                                               err = EWRONG_OPT;
+                                               break;
+                                       }
+                                       c.dbg_lv = atoi(optarg);
+                                       MSG(0, "Info: Debug level = %d\n",
+                                                               c.dbg_lv);
+                                       break;
+                               case 's':
+                                       if (strncmp(optarg, "0x", 2))
+                                               ret = sscanf(optarg, 
"%"PRIu64"",
+                                                               
&c.defrag_start);
+                                       else
+                                               ret = sscanf(optarg, 
"%"PRIx64"",
+                                                               
&c.defrag_start);
+                                       break;
+                               case 'l':
+                                       if (strncmp(optarg, "0x", 2))
+                                               ret = sscanf(optarg, 
"%"PRIu64"",
+                                                               &c.defrag_len);
+                                       else
+                                               ret = sscanf(optarg, 
"%"PRIx64"",
+                                                               &c.defrag_len);
+                                       break;
+                               case 't':
+                                       if (strncmp(optarg, "0x", 2))
+                                               ret = sscanf(optarg, 
"%"PRIu64"",
+                                                               
&c.defrag_target);
+                                       else
+                                               ret = sscanf(optarg, 
"%"PRIx64"",
+                                                               
&c.defrag_target);
+                                       break;
+                               case 'i':
+                                       c.defrag_shrink = 1;
+                                       break;
+                               default:
+                                       err = EUNKNOWN_OPT;
                                        break;
                                }
-                               c.dbg_lv = atoi(optarg);
-                               MSG(0, "Info: Debug level = %d\n",
-                                                       c.dbg_lv);
-                               break;
-                       case 's':
-                               if (strncmp(optarg, "0x", 2))
-                                       ret = sscanf(optarg, "%"PRIu64"",
-                                                       &c.defrag_start);
-                               else
-                                       ret = sscanf(optarg, "%"PRIx64"",
-                                                       &c.defrag_start);
-                               break;
-                       case 'l':
-                               if (strncmp(optarg, "0x", 2))
-                                       ret = sscanf(optarg, "%"PRIu64"",
-                                                       &c.defrag_len);
-                               else
-                                       ret = sscanf(optarg, "%"PRIx64"",
-                                                       &c.defrag_len);
-                               break;
-                       case 't':
-                               if (strncmp(optarg, "0x", 2))
-                                       ret = sscanf(optarg, "%"PRIu64"",
-                                                       &c.defrag_target);
-                               else
-                                       ret = sscanf(optarg, "%"PRIx64"",
-                                                       &c.defrag_target);
-                               break;
-                       case 'i':
-                               c.defrag_shrink = 1;
-                               break;
-                       default:
-                               err = EUNKNOWN_OPT;
-                               break;
+                               ASSERT(ret >= 0);
+                               if (err != NOERROR)
+                                       break;
                        }
-                       ASSERT(ret >= 0);
-                       if (err != NOERROR)
-                               break;
                }
-       } else if (!strcmp("resize.f2fs", prog)) {
-               const char *option_string = "d:t:";
-
-               c.func = RESIZE;
-               while ((option = getopt(argc, argv, option_string)) != EOF) {
-                       int ret = 0;
-
-                       switch (option) {
-                       case 'd':
-                               if (!is_digits(optarg)) {
-                                       err = EWRONG_OPT;
+               break;
+       case RESIZE:
+               {
+                       const char *option_string = "d:t:";
+
+                       while ((option = getopt(argc, argv, option_string)) != 
EOF) {
+                               int ret = 0;
+
+                               switch (option) {
+                               case 'd':
+                                       if (!is_digits(optarg)) {
+                                               err = EWRONG_OPT;
+                                               break;
+                                       }
+                                       c.dbg_lv = atoi(optarg);
+                                       MSG(0, "Info: Debug level = %d\n",
+                                                               c.dbg_lv);
+                                       break;
+                               case 't':
+                                       if (strncmp(optarg, "0x", 2))
+                                               ret = sscanf(optarg, 
"%"PRIu64"",
+                                                               
&c.target_sectors);
+                                       else
+                                               ret = sscanf(optarg, 
"%"PRIx64"",
+                                                               
&c.target_sectors);
+                                       break;
+                               default:
+                                       err = EUNKNOWN_OPT;
                                        break;
                                }
-                               c.dbg_lv = atoi(optarg);
-                               MSG(0, "Info: Debug level = %d\n",
-                                                       c.dbg_lv);
-                               break;
-                       case 't':
-                               if (strncmp(optarg, "0x", 2))
-                                       ret = sscanf(optarg, "%"PRIu64"",
-                                                       &c.target_sectors);
-                               else
-                                       ret = sscanf(optarg, "%"PRIx64"",
-                                                       &c.target_sectors);
-                               break;
-                       default:
-                               err = EUNKNOWN_OPT;
-                               break;
+                               ASSERT(ret >= 0);
+                               if (err != NOERROR)
+                                       break;
                        }
-                       ASSERT(ret >= 0);
-                       if (err != NOERROR)
-                               break;
                }
-       } else if (!strcmp("sload.f2fs", prog)) {
-               const char *option_string = "d:f:t:";
-
-               c.func = SLOAD;
-               while ((option = getopt(argc, argv, option_string)) != EOF) {
-                       switch (option) {
-                       case 'd':
-                               if (!is_digits(optarg)) {
-                                       err = EWRONG_OPT;
+               break;
+       case SLOAD:
+               {
+                       const char *option_string = "d:f:t:";
+
+                       while ((option = getopt(argc, argv, option_string)) != 
EOF) {
+                               switch (option) {
+                               case 'd':
+                                       if (!is_digits(optarg)) {
+                                               err = EWRONG_OPT;
+                                               break;
+                                       }
+                                       c.dbg_lv = atoi(optarg);
+                                       MSG(0, "Info: Debug level = %d\n",
+                                                       c.dbg_lv);
+                                       break;
+                               case 'f':
+                                       c.from_dir = (char *)optarg;
+                                       break;
+                               case 't':
+                                       c.mount_point = (char *)optarg;
+                                       break;
+                               default:
+                                       err = EUNKNOWN_OPT;
                                        break;
                                }
-                               c.dbg_lv = atoi(optarg);
-                               MSG(0, "Info: Debug level = %d\n",
-                                               c.dbg_lv);
-                               break;
-                       case 'f':
-                               c.from_dir = (char *)optarg;
-                               break;
-                       case 't':
-                               c.mount_point = (char *)optarg;
-                               break;
-                       default:
-                               err = EUNKNOWN_OPT;
-                               break;
+                               if (err != NOERROR)
+                                       break;
                        }
-                       if (err != NOERROR)
-                               break;
                }
+               break;
        }
+
        if (argc > optind) {
                c.dbg_lv = 0;
                err = EUNKNOWN_ARG;
-- 
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to