Message ID | 1406598909-9658-1-git-send-email-jmaggard10@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
-------- Original Message -------- Subject: [PATCH v2] btrfs-progs: add always option to restore's looping prompt From: Justin Maggard <jmaggard10@gmail.com> To: <linux-btrfs@vger.kernel.org> Date: 2014?07?29? 09:55 > If you are using btrfs restore to try to recover a very large or > fragmented file, you may encounter _lots_ of prompts requiring > you to press 'y' to continue because we are looping a lot. > > Add the option to press 'a', to supress these prompts for the rest > of the file. > > Signed-off-by: Justin Maggard <jmaggard10@gmail.com> Reviewed-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Thanks, Qu > --- > cmds-restore.c | 31 ++++++++++++++++++++++--------- > 1 file changed, 22 insertions(+), 9 deletions(-) > > diff --git a/cmds-restore.c b/cmds-restore.c > index 3465f84..059194d 100644 > --- a/cmds-restore.c > +++ b/cmds-restore.c > @@ -410,23 +410,31 @@ out: > return ret; > } > > -static int ask_to_continue(const char *file) > +enum loop_response { > + LOOP_STOP, > + LOOP_CONTINUE, > + LOOP_DONTASK > +}; > + > +static enum loop_response ask_to_continue(const char *file) > { > char buf[2]; > char *ret; > > printf("We seem to be looping a lot on %s, do you want to keep going " > - "on ? (y/N): ", file); > + "on ? (y/N/a): ", file); > again: > ret = fgets(buf, 2, stdin); > if (*ret == '\n' || tolower(*ret) == 'n') > - return 1; > + return LOOP_STOP; > + if (tolower(*ret) == 'a') > + return LOOP_DONTASK; > if (tolower(*ret) != 'y') { > - printf("Please enter either 'y' or 'n': "); > + printf("Please enter one of 'y', 'n', or 'a': "); > goto again; > } > > - return 0; > + return LOOP_CONTINUE; > } > > > @@ -594,11 +602,16 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key, > } > > while (1) { > - if (loops++ >= 1024) { > - ret = ask_to_continue(file); > - if (ret) > + if (loops >= 0 && loops++ >= 1024) { > + enum loop_response resp; > + > + resp = ask_to_continue(file); > + if (resp == LOOP_STOP) > break; > - loops = 0; > + else if (resp == LOOP_CONTINUE) > + loops = 0; > + else if (resp == LOOP_DONTASK) > + loops = -1; > } > if (path->slots[0] >= btrfs_header_nritems(leaf)) { > do { -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/cmds-restore.c b/cmds-restore.c index 3465f84..059194d 100644 --- a/cmds-restore.c +++ b/cmds-restore.c @@ -410,23 +410,31 @@ out: return ret; } -static int ask_to_continue(const char *file) +enum loop_response { + LOOP_STOP, + LOOP_CONTINUE, + LOOP_DONTASK +}; + +static enum loop_response ask_to_continue(const char *file) { char buf[2]; char *ret; printf("We seem to be looping a lot on %s, do you want to keep going " - "on ? (y/N): ", file); + "on ? (y/N/a): ", file); again: ret = fgets(buf, 2, stdin); if (*ret == '\n' || tolower(*ret) == 'n') - return 1; + return LOOP_STOP; + if (tolower(*ret) == 'a') + return LOOP_DONTASK; if (tolower(*ret) != 'y') { - printf("Please enter either 'y' or 'n': "); + printf("Please enter one of 'y', 'n', or 'a': "); goto again; } - return 0; + return LOOP_CONTINUE; } @@ -594,11 +602,16 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key, } while (1) { - if (loops++ >= 1024) { - ret = ask_to_continue(file); - if (ret) + if (loops >= 0 && loops++ >= 1024) { + enum loop_response resp; + + resp = ask_to_continue(file); + if (resp == LOOP_STOP) break; - loops = 0; + else if (resp == LOOP_CONTINUE) + loops = 0; + else if (resp == LOOP_DONTASK) + loops = -1; } if (path->slots[0] >= btrfs_header_nritems(leaf)) { do {
If you are using btrfs restore to try to recover a very large or fragmented file, you may encounter _lots_ of prompts requiring you to press 'y' to continue because we are looping a lot. Add the option to press 'a', to supress these prompts for the rest of the file. Signed-off-by: Justin Maggard <jmaggard10@gmail.com> --- cmds-restore.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-)