aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--findutils/xargs.c12
-rw-r--r--include/libbb.h1
-rw-r--r--libbb/ask_confirmation.c12
-rw-r--r--libbb/remove_file.c7
-rw-r--r--miscutils/i2c_tools.c1
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
496static int xargs_ask_confirmation(void) 496static 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,
1412char *bb_ask_noecho_stdin(const char *prompt) FAST_FUNC; 1412char *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)?
1414char *bb_ask_noecho(const int fd, int timeout, const char *prompt) FAST_FUNC; 1414char *bb_ask_noecho(const int fd, int timeout, const char *prompt) FAST_FUNC;
1415int bb_ask_y_confirmation_FILE(FILE *fp) FAST_FUNC;
1415int bb_ask_y_confirmation(void) FAST_FUNC; 1416int 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 */
14int FAST_FUNC bb_ask_y_confirmation(void) 14int 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
29int 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)
421static void confirm_or_abort(void) 421static 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}