Justin Maggard
2014-Jul-29 00:03 UTC
[PATCH] btrfs-progs: add always option to restore's looping prompt
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. --- cmds-restore.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/cmds-restore.c b/cmds-restore.c index 96b97e1..ae95d5a 100644 --- a/cmds-restore.c +++ b/cmds-restore.c @@ -410,17 +410,19 @@ static int ask_to_continue(const char *file) 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 0; + if (tolower(*ret) == 'a') + return 2; if (tolower(*ret) != 'y') { printf("Please enter either 'y' or 'n': "); goto again; } - return 0; + return 1; } @@ -588,11 +590,14 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key, } while (1) { - if (loops++ >= 1024) { + if (loops >= 0 && loops++ >= 1024) { ret = ask_to_continue(file); - if (ret) + if (ret == 0) break; - loops = 0; + else if (ret == 1) + loops = 0; + else if (ret == 2) + loops = -1; } if (path->slots[0] >= btrfs_header_nritems(leaf)) { do { -- 1.9.1 -- 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