diff options
-rw-r--r-- | findutils/xargs.c | 12 | ||||
-rw-r--r-- | include/libbb.h | 1 | ||||
-rw-r--r-- | libbb/ask_confirmation.c | 12 | ||||
-rw-r--r-- | libbb/remove_file.c | 7 | ||||
-rw-r--r-- | miscutils/i2c_tools.c | 1 |
5 files changed, 20 insertions, 13 deletions
diff --git a/findutils/xargs.c b/findutils/xargs.c index 117a39b62..1d85d50e8 100644 --- a/findutils/xargs.c +++ b/findutils/xargs.c | |||
@@ -496,16 +496,16 @@ static char* FAST_FUNC process_stdin_with_replace(int n_max_chars, int n_max_arg | |||
496 | static int xargs_ask_confirmation(void) | 496 | static int xargs_ask_confirmation(void) |
497 | { | 497 | { |
498 | FILE *tty_stream; | 498 | FILE *tty_stream; |
499 | int c, savec; | 499 | int r; |
500 | 500 | ||
501 | tty_stream = xfopen_for_read(CURRENT_TTY); | 501 | tty_stream = xfopen_for_read(CURRENT_TTY); |
502 | |||
502 | fputs(" ?...", stderr); | 503 | fputs(" ?...", stderr); |
503 | fflush_all(); | 504 | r = bb_ask_y_confirmation_FILE(tty_stream); |
504 | c = savec = getc(tty_stream); | 505 | |
505 | while (c != EOF && c != '\n') | ||
506 | c = getc(tty_stream); | ||
507 | fclose(tty_stream); | 506 | fclose(tty_stream); |
508 | return (savec == 'y' || savec == 'Y'); | 507 | |
508 | return r; | ||
509 | } | 509 | } |
510 | #else | 510 | #else |
511 | # define xargs_ask_confirmation() 1 | 511 | # define xargs_ask_confirmation() 1 |
diff --git a/include/libbb.h b/include/libbb.h index c7e830c09..5388d9d95 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -1412,6 +1412,7 @@ extern int set_loop(char **devname, const char *file, unsigned long long offset, | |||
1412 | char *bb_ask_noecho_stdin(const char *prompt) FAST_FUNC; | 1412 | char *bb_ask_noecho_stdin(const char *prompt) FAST_FUNC; |
1413 | //TODO: pass buf pointer or return allocated buf (avoid statics)? | 1413 | //TODO: pass buf pointer or return allocated buf (avoid statics)? |
1414 | char *bb_ask_noecho(const int fd, int timeout, const char *prompt) FAST_FUNC; | 1414 | char *bb_ask_noecho(const int fd, int timeout, const char *prompt) FAST_FUNC; |
1415 | int bb_ask_y_confirmation_FILE(FILE *fp) FAST_FUNC; | ||
1415 | int bb_ask_y_confirmation(void) FAST_FUNC; | 1416 | int bb_ask_y_confirmation(void) FAST_FUNC; |
1416 | 1417 | ||
1417 | /* Returns -1 if input is invalid. current_mode is a base for e.g. "u+rw" */ | 1418 | /* Returns -1 if input is invalid. current_mode is a base for e.g. "u+rw" */ |
diff --git a/libbb/ask_confirmation.c b/libbb/ask_confirmation.c index ccd983c29..e4814e215 100644 --- a/libbb/ask_confirmation.c +++ b/libbb/ask_confirmation.c | |||
@@ -8,15 +8,16 @@ | |||
8 | */ | 8 | */ |
9 | #include "libbb.h" | 9 | #include "libbb.h" |
10 | 10 | ||
11 | /* Read a line from stdin. If the first non-whitespace char is 'y' or 'Y', | 11 | /* Read a line from fp. If the first non-whitespace char is 'y' or 'Y', |
12 | * return 1. Otherwise return 0. | 12 | * return 1. Otherwise return 0. |
13 | */ | 13 | */ |
14 | int FAST_FUNC bb_ask_y_confirmation(void) | 14 | int FAST_FUNC bb_ask_y_confirmation_FILE(FILE *fp) |
15 | { | 15 | { |
16 | char first = 0; | 16 | char first = 0; |
17 | int c; | 17 | int c; |
18 | 18 | ||
19 | while (((c = getchar()) != EOF) && (c != '\n')) { | 19 | fflush_all(); |
20 | while (((c = fgetc(fp)) != EOF) && (c != '\n')) { | ||
20 | if (first == 0 && !isblank(c)) { | 21 | if (first == 0 && !isblank(c)) { |
21 | first = c|0x20; | 22 | first = c|0x20; |
22 | } | 23 | } |
@@ -24,3 +25,8 @@ int FAST_FUNC bb_ask_y_confirmation(void) | |||
24 | 25 | ||
25 | return first == 'y'; | 26 | return first == 'y'; |
26 | } | 27 | } |
28 | |||
29 | int FAST_FUNC bb_ask_y_confirmation(void) | ||
30 | { | ||
31 | return bb_ask_y_confirmation_FILE(stdin); | ||
32 | } | ||
diff --git a/libbb/remove_file.c b/libbb/remove_file.c index 074ffae70..86c9a5c56 100644 --- a/libbb/remove_file.c +++ b/libbb/remove_file.c | |||
@@ -39,8 +39,8 @@ int FAST_FUNC remove_file(const char *path, int flags) | |||
39 | if ((!(flags & FILEUTILS_FORCE) && access(path, W_OK) < 0 && isatty(0)) | 39 | if ((!(flags & FILEUTILS_FORCE) && access(path, W_OK) < 0 && isatty(0)) |
40 | || (flags & FILEUTILS_INTERACTIVE) | 40 | || (flags & FILEUTILS_INTERACTIVE) |
41 | ) { | 41 | ) { |
42 | fprintf(stderr, "%s: descend into directory '%s'? ", applet_name, | 42 | fprintf(stderr, "%s: descend into directory '%s'? ", |
43 | path); | 43 | applet_name, path); |
44 | if (!bb_ask_y_confirmation()) | 44 | if (!bb_ask_y_confirmation()) |
45 | return 0; | 45 | return 0; |
46 | } | 46 | } |
@@ -67,7 +67,8 @@ int FAST_FUNC remove_file(const char *path, int flags) | |||
67 | } | 67 | } |
68 | 68 | ||
69 | if (flags & FILEUTILS_INTERACTIVE) { | 69 | if (flags & FILEUTILS_INTERACTIVE) { |
70 | fprintf(stderr, "%s: remove directory '%s'? ", applet_name, path); | 70 | fprintf(stderr, "%s: remove directory '%s'? ", |
71 | applet_name, path); | ||
71 | if (!bb_ask_y_confirmation()) | 72 | if (!bb_ask_y_confirmation()) |
72 | return status; | 73 | return status; |
73 | } | 74 | } |
diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index 8b201c0b1..6a2134063 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c | |||
@@ -421,7 +421,6 @@ static void check_write_funcs(int fd, int mode, int pec) | |||
421 | static void confirm_or_abort(void) | 421 | static void confirm_or_abort(void) |
422 | { | 422 | { |
423 | fprintf(stderr, "Continue? [y/N] "); | 423 | fprintf(stderr, "Continue? [y/N] "); |
424 | fflush_all(); | ||
425 | if (!bb_ask_y_confirmation()) | 424 | if (!bb_ask_y_confirmation()) |
426 | bb_error_msg_and_die("aborting"); | 425 | bb_error_msg_and_die("aborting"); |
427 | } | 426 | } |