This patch is just to clean up. Cc: Sheng Yong <shengyo...@huawei.com> Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org> --- fsck/fsck.h | 8 ++++ fsck/main.c | 140 ++++++++++++++++++++++++++++++++++++------------------------ 2 files changed, 93 insertions(+), 55 deletions(-)
diff --git a/fsck/fsck.h b/fsck/fsck.h index f21e199..5a6f018 100644 --- a/fsck/fsck.h +++ b/fsck/fsck.h @@ -21,6 +21,14 @@ enum { PREEN_MODE_MAX }; +enum { + NOERROR, + EWRONG_OPT, + ENEED_ARG, + EUNKNOWN_OPT, + EUNKNOWN_ARG, +}; + /* fsck.c */ struct orphan_info { u32 nr_inodes; diff --git a/fsck/main.c b/fsck/main.c index 0ac1711..6c94a70 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -78,20 +78,6 @@ void sload_usage() exit(1); } -static void __handle_fsck_args(int optopt) -{ - switch (optopt) { - case 'p': - MSG(0, "Info: Use default preen mode\n"); - c.preen_mode = PREEN_MODE_0; - c.auto_fix = 1; - break; - default: - MSG(0, "\tError: Need argument for -%c\n", optopt); - fsck_usage(); - } -} - static int is_digits(char *optarg) { int i; @@ -102,24 +88,29 @@ static int is_digits(char *optarg) return i == strlen(optarg); } +static void error_out(void) +{ + if (c.func == FSCK) + fsck_usage(); + else if (c.func == DUMP) + dump_usage(); + else if (c.func == DEFRAG) + defrag_usage(); + else if (c.func == RESIZE) + resize_usage(); + else if (c.func == SLOAD) + sload_usage(); +} + void f2fs_parse_options(int argc, char *argv[]) { int option = 0; char *prog = basename(argv[0]); - int err = 0; + int err = NOERROR; if (argc < 2) { MSG(0, "\tError: Device not specified\n"); - if (c.func == FSCK) - fsck_usage(); - else if (c.func == DUMP) - dump_usage(); - else if (c.func == DEFRAG) - defrag_usage(); - else if (c.func == RESIZE) - resize_usage(); - else if (c.func == SLOAD) - sload_usage(); + error_out(); } c.devices[0].path = strdup(argv[argc - 1]); argv[argc-- - 1] = 0; @@ -144,9 +135,7 @@ void f2fs_parse_options(int argc, char *argv[]) optind--; break; } else if (!is_digits(optarg)) { - MSG(0, "\tError: Wrong option -%c %s\n", - option, optarg); - err = 1; + err = EWRONG_OPT; break; } c.preen_mode = atoi(optarg); @@ -161,14 +150,10 @@ void f2fs_parse_options(int argc, char *argv[]) break; case 'd': if (optarg[0] == '-') { - MSG(0, "\tError: Need argument for -%c\n", - option); - err = 1; + err = ENEED_ARG; break; } else if (!is_digits(optarg)) { - MSG(0, "\tError: Wrong option -%c %s\n", - option, optarg); - err = 1; + err = EWRONG_OPT; break; } c.dbg_lv = atoi(optarg); @@ -181,25 +166,27 @@ void f2fs_parse_options(int argc, char *argv[]) case 't': c.dbg_lv = -1; break; + + case ':': - __handle_fsck_args(optopt); + 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 '?': - MSG(0, "\tError: Unknown option %c\n", optopt); - err = 1; - break; + option = optopt; default: - MSG(0, "\tError: Unknown option %c\n", option); - err = 1; + err = EUNKNOWN_OPT; break; } - if (err) - fsck_usage(); - } - if (argc > optind) { - c.dbg_lv = 0; - MSG(0, "\tError: Unknown argument %s\n", argv[optind]); - fsck_usage(); + if (err != NOERROR) + break; } } else if (!strcmp("dump.f2fs", prog)) { const char *option_string = "d:i:n:s:a:b:"; @@ -220,6 +207,10 @@ void f2fs_parse_options(int argc, char *argv[]) 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); @@ -256,11 +247,12 @@ void f2fs_parse_options(int argc, char *argv[]) &dump_opt.blk_addr); break; default: - MSG(0, "\tError: Unknown option %c\n", option); - dump_usage(); + err = EUNKNOWN_OPT; break; } ASSERT(ret >= 0); + if (err != NOERROR) + break; } c.private = &dump_opt; @@ -273,6 +265,10 @@ void f2fs_parse_options(int argc, char *argv[]) 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); @@ -305,11 +301,12 @@ void f2fs_parse_options(int argc, char *argv[]) c.defrag_shrink = 1; break; default: - MSG(0, "\tError: Unknown option %c\n", option); - defrag_usage(); + err = EUNKNOWN_OPT; break; } ASSERT(ret >= 0); + if (err != NOERROR) + break; } } else if (!strcmp("resize.f2fs", prog)) { const char *option_string = "d:t:"; @@ -320,6 +317,10 @@ void f2fs_parse_options(int argc, char *argv[]) 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); @@ -333,11 +334,12 @@ void f2fs_parse_options(int argc, char *argv[]) &c.target_sectors); break; default: - MSG(0, "\tError: Unknown option %c\n", option); - resize_usage(); + err = EUNKNOWN_OPT; break; } ASSERT(ret >= 0); + if (err != NOERROR) + break; } } else if (!strcmp("sload.f2fs", prog)) { const char *option_string = "d:f:t:"; @@ -346,6 +348,10 @@ void f2fs_parse_options(int argc, char *argv[]) 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); @@ -357,12 +363,36 @@ void f2fs_parse_options(int argc, char *argv[]) c.mount_point = (char *)optarg; break; default: - MSG(0, "\tError: Unknown option %c\n", option); - sload_usage(); + err = EUNKNOWN_OPT; break; } + if (err != NOERROR) + break; } } + if (argc > optind) { + c.dbg_lv = 0; + err = EUNKNOWN_ARG; + } + if (err == NOERROR) + return; + + /* print out error */ + switch (err) { + case EWRONG_OPT: + MSG(0, "\tError: Wrong option -%c %s\n", option, optarg); + break; + case ENEED_ARG: + MSG(0, "\tError: Need argument for -%c\n", option); + break; + case EUNKNOWN_OPT: + MSG(0, "\tError: Unknown option %c\n", option); + break; + case EUNKNOWN_ARG: + MSG(0, "\tError: Unknown argument %s\n", argv[optind]); + break; + } + error_out(); } static void do_fsck(struct f2fs_sb_info *sbi) -- 2.11.0 ------------------------------------------------------------------------------ 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 Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel