xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy
No binary (build failed)
—
(log yok)
| @@ -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 | |
| @@ -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" */ | |
| @@ -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); |
| + | } |
| @@ -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; | |
| } | |
| @@ -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"); | |
| } | |