aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-04-07 15:21:35 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2018-04-07 15:23:10 +0200
commitbae8fc4436f9aeb43ef0aaccd1c9b1b35b5a4617 (patch)
tree454dbb6414c851c9ce0d6fe478ca86cf5cf4fa1b
parent77cb6b99a436c20bb171e6cdad7b8b8b5ce3692c (diff)
downloadbusybox-bae8fc4436f9aeb43ef0aaccd1c9b1b35b5a4617.tar.gz
xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy
function old new delta bb_ask_y_confirmation_FILE - 83 +83 inetd_main 2033 2043 +10 udhcp_send_kernel_packet 295 301 +6 rmescapes 306 310 +4 send_tree 353 355 +2 i2cdetect_main 674 672 -2 confirm_or_abort 43 38 -5 get_terminal_width_height 242 234 -8 bb_ask_y_confirmation 76 10 -66 xargs_main 823 755 -68 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/5 up/down: 105/-149) Total: -44 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-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
static int xargs_ask_confirmation(void)
{
FILE *tty_stream;
- int c, savec;
+ int r;
tty_stream = xfopen_for_read(CURRENT_TTY);
+
fputs(" ?...", stderr);
- fflush_all();
- c = savec = getc(tty_stream);
- while (c != EOF && c != '\n')
- c = getc(tty_stream);
+ r = bb_ask_y_confirmation_FILE(tty_stream);
+
fclose(tty_stream);
- return (savec == 'y' || savec == 'Y');
+
+ return r;
}
#else
# 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,
char *bb_ask_noecho_stdin(const char *prompt) FAST_FUNC;
//TODO: pass buf pointer or return allocated buf (avoid statics)?
char *bb_ask_noecho(const int fd, int timeout, const char *prompt) FAST_FUNC;
+int bb_ask_y_confirmation_FILE(FILE *fp) FAST_FUNC;
int bb_ask_y_confirmation(void) FAST_FUNC;
/* 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 @@
*/
#include "libbb.h"
-/* Read a line from stdin. If the first non-whitespace char is 'y' or 'Y',
+/* Read a line from fp. If the first non-whitespace char is 'y' or 'Y',
* return 1. Otherwise return 0.
*/
-int FAST_FUNC bb_ask_y_confirmation(void)
+int FAST_FUNC bb_ask_y_confirmation_FILE(FILE *fp)
{
char first = 0;
int c;
- while (((c = getchar()) != EOF) && (c != '\n')) {
+ fflush_all();
+ while (((c = fgetc(fp)) != EOF) && (c != '\n')) {
if (first == 0 && !isblank(c)) {
first = c|0x20;
}
@@ -24,3 +25,8 @@ int FAST_FUNC bb_ask_y_confirmation(void)
return first == 'y';
}
+
+int FAST_FUNC bb_ask_y_confirmation(void)
+{
+ return bb_ask_y_confirmation_FILE(stdin);
+}
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)
if ((!(flags & FILEUTILS_FORCE) && access(path, W_OK) < 0 && isatty(0))
|| (flags & FILEUTILS_INTERACTIVE)
) {
- fprintf(stderr, "%s: descend into directory '%s'? ", applet_name,
- path);
+ fprintf(stderr, "%s: descend into directory '%s'? ",
+ applet_name, path);
if (!bb_ask_y_confirmation())
return 0;
}
@@ -67,7 +67,8 @@ int FAST_FUNC remove_file(const char *path, int flags)
}
if (flags & FILEUTILS_INTERACTIVE) {
- fprintf(stderr, "%s: remove directory '%s'? ", applet_name, path);
+ fprintf(stderr, "%s: remove directory '%s'? ",
+ applet_name, path);
if (!bb_ask_y_confirmation())
return status;
}
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)
static void confirm_or_abort(void)
{
fprintf(stderr, "Continue? [y/N] ");
- fflush_all();
if (!bb_ask_y_confirmation())
bb_error_msg_and_die("aborting");
}