Hi Priotr,

On 07/04, Piotr Sokołowski wrote:
> 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.

This should be fixed by:

https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?h=dev-test&id=f081d54ba8e0cbcfb0ab8e0dd90934b9113f2d7e

Let me know, if I'm missing something.

Thanks,

> 
> ---
>  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

------------------------------------------------------------------------------
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