xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 7 Apr 2018 13:21:35 +0000 (15:21 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 7 Apr 2018 13:23:10 +0000 (15:23 +0200)
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>
findutils/xargs.c
include/libbb.h
libbb/ask_confirmation.c
libbb/remove_file.c
miscutils/i2c_tools.c

index 117a39b629ac9efb11f0574e2abfa5f1e5608ecf..1d85d50e894a32a860e5022248c95655cb08c32a 100644 (file)
@@ -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
index c7e830c09d0408e23e591b7107d4b63e4eeaefcd..5388d9d95ab712a2b09e0a204b732449b7300289 100644 (file)
@@ -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" */
index ccd983c29f224311587edf215f3bbdb29d770aa5..e4814e21594df9d58f7f22fe05ac94c983ff6d59 100644 (file)
@@ -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);
+}
index 074ffae707421ef6fc4a1d19bdbd683e89aa134a..86c9a5c56bd24b9eb1049bcfb8ad8462933eb373 100644 (file)
@@ -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;
                }
index 8b201c0b154fb637ecca82952de514c25bf6a8e3..6a213406317ad5478b4b86049ae69f209203246b 100644 (file)
@@ -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");
 }