* [PATCH v2] btrfs-progs: add always option to restore's looping prompt
@ 2014-07-29 1:55 Justin Maggard
2014-07-29 2:11 ` Qu Wenruo
0 siblings, 1 reply; 2+ messages in thread
From: Justin Maggard @ 2014-07-29 1:55 UTC (permalink / raw)
To: linux-btrfs; +Cc: Justin Maggard
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(-)
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 {
--
1.7.10.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] btrfs-progs: add always option to restore's looping prompt
2014-07-29 1:55 [PATCH v2] btrfs-progs: add always option to restore's looping prompt Justin Maggard
@ 2014-07-29 2:11 ` Qu Wenruo
0 siblings, 0 replies; 2+ messages in thread
From: Qu Wenruo @ 2014-07-29 2:11 UTC (permalink / raw)
To: Justin Maggard, linux-btrfs
-------- 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 {
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-07-29 2:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-29 1:55 [PATCH v2] btrfs-progs: add always option to restore's looping prompt Justin Maggard
2014-07-29 2:11 ` Qu Wenruo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.