On Thu, Dec 28, 2017 at 1:40 PM, zhangyi (F) <yi.zhang@xxxxxxxxxx> wrote: > Add -n -p and -y options to make it official as fsck utilities. > > -p, automatic repair (no questions) > -n, make no changes to the filesystem > -y, assume "yes" to all questions > > Signed-off-by: zhangyi (F) <yi.zhang@xxxxxxxxxx> Looks ok. Reviewed-by: Amir Goldstein <amir73il@xxxxxxxxx> > --- > README.md | 6 ++++-- > fsck.c | 36 ++++++++++++++++++++++++++++++------ > lib.c | 3 ++- > lib.h | 6 +++++- > 4 files changed, 41 insertions(+), 10 deletions(-) > > diff --git a/README.md b/README.md > index c2acb65..458a815 100644 > --- a/README.md > +++ b/README.md > @@ -44,14 +44,16 @@ Usage > > 2. Run fsck.overlay program: > Usage: > - fsck.overlay [-l lowerdir] [-u upperdir] [-w workdir] [-avhV] > + fsck.overlay [-l lowerdir] [-u upperdir] [-w workdir] [-pnyvhV] > > Options: > -l, --lowerdir=LOWERDIR specify lower directories of overlayfs, > multiple lower use ':' as separator. > -u, --upperdir=UPPERDIR specify upper directory of overlayfs > -w, --workdir=WORKDIR specify work directory of overlayfs > - -a, --auto repair automatically (no questions) > + -p, automatic repair (no questions) > + -n, make no changes to the filesystem > + -y, assume "yes" to all questions > -v, --verbose print more messages of overlayfs > -h, --help display this usage of overlayfs > -V, --version display version information > diff --git a/fsck.c b/fsck.c > index d4e861a..44211f7 100644 > --- a/fsck.c > +++ b/fsck.c > @@ -62,13 +62,15 @@ static void ovl_clean_lowerdirs(void) > static void usage(void) > { > print_info(_("Usage:\n\t%s [-l lowerdir] [-u upperdir] [-w workdir] " > - "[-avhV]\n\n"), program_name); > + "[-pnyvhV]\n\n"), program_name); > print_info(_("Options:\n" > "-l, --lowerdir=LOWERDIR specify lower directories of overlayfs,\n" > " multiple lower use ':' as separator\n" > "-u, --upperdir=UPPERDIR specify upper directory of overlayfs\n" > "-w, --workdir=WORKDIR specify work directory of overlayfs\n" > - "-a, --auto repair automatically (no questions)\n" > + "-p, automatic repair (no questions)\n" > + "-n, make no changes to the filesystem\n" > + "-y, assume \"yes\" to all questions\n" > "-v, --verbose print more messages of overlayfs\n" > "-h, --help display this usage of overlayfs\n" > "-V, --version display version information\n")); > @@ -81,19 +83,19 @@ static void parse_options(int argc, char *argv[]) > int c; > int ret = 0; > bool show_usage = false; > + bool opt_conflict = false; > > struct option long_options[] = { > {"lowerdir", required_argument, NULL, 'l'}, > {"upperdir", required_argument, NULL, 'u'}, > {"workdir", required_argument, NULL, 'w'}, > - {"auto", no_argument, NULL, 'a'}, > {"verbose", no_argument, NULL, 'v'}, > {"version", no_argument, NULL, 'V'}, > {"help", no_argument, NULL, 'h'}, > {NULL, 0, NULL, 0} > }; > > - while ((c = getopt_long(argc, argv, "l:u:w:avVh", long_options, NULL)) != -1) { > + while ((c = getopt_long(argc, argv, "l:u:w:apnyvVh", long_options, NULL)) != -1) { > switch (c) { > case 'l': > lowertemp = strdup(optarg); > @@ -119,7 +121,23 @@ static void parse_options(int argc, char *argv[]) > } > break; > case 'a': > - flags |= FL_AUTO; > + case 'p': > + if (flags & (FL_OPT_YES | FL_OPT_NO)) > + opt_conflict = true; > + else > + flags |= FL_OPT_AUTO; > + break; > + case 'n': > + if (flags & (FL_OPT_YES | FL_OPT_AUTO)) > + opt_conflict = true; > + else > + flags |= FL_OPT_NO; > + break; > + case 'y': > + if (flags & (FL_OPT_NO | FL_OPT_AUTO)) > + opt_conflict = true; > + else > + flags |= FL_OPT_YES; > break; > case 'v': > flags |= FL_VERBOSE; > @@ -143,6 +161,12 @@ static void parse_options(int argc, char *argv[]) > goto err_out; > } > > + if (opt_conflict) { > + print_info(_("Only one of the options -p/-a, -n or -y can be specified!\n\n")); > + show_usage = true; > + goto err_out; > + } > + > return; > > err_out: > @@ -177,7 +201,7 @@ int main(int argc, char *argv[]) > /* Ensure overlay filesystem not mounted */ > if ((err = ovl_check_mount(&mounted))) > goto out; > - if (mounted) { > + if (mounted && !(flags & FL_OPT_NO)) { > set_st_abort(&status); > goto out; > } > diff --git a/lib.c b/lib.c > index 271cafd..497d357 100644 > --- a/lib.c > +++ b/lib.c > @@ -59,7 +59,8 @@ static int ask_yn(const char *question, int def) > /* Ask user */ > int ask_question(const char *question, int def) > { > - if (flags & FL_AUTO) { > + if (flags & FL_OPT_MASK) { > + def = (flags & FL_OPT_YES) ? 1 : (flags & FL_OPT_NO) ? 0 : def; > print_info(_("%s? %s\n"), question, def ? _("y") : _("n")); > return def; > } > diff --git a/lib.h b/lib.h > index 235719c..5d94836 100644 > --- a/lib.h > +++ b/lib.h > @@ -37,7 +37,11 @@ > #define FL_VERBOSE (1 << 0) /* verbose */ > #define FL_UPPER (1 << 1) /* specify upper directory */ > #define FL_WORK (1 << 2) /* specify work directory */ > -#define FL_AUTO (1 << 3) /* automactically scan dirs and repair */ > +#define FL_OPT_AUTO (1 << 3) /* automactically scan dirs and repair */ > +#define FL_OPT_NO (1 << 4) /* no changes to the filesystem */ > +#define FL_OPT_YES (1 << 5) /* yes to all questions */ > +#define FL_OPT_MASK (FL_OPT_AUTO|FL_OPT_NO|FL_OPT_YES) > + > > /* Scan path type */ > #define OVL_UPPER 0 > -- > 2.9.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html