aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2019-01-01 02:19:02 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2019-01-01 02:19:02 +0100
commit51b510a480b99d480bcf6919b8bae16eb1c61718 (patch)
tree3f6832a1c7ffe27449125e5f7d843ff6313bac24
parent8797adc1c6e84789c261ee24afe5a1cbfaddba6b (diff)
downloadbusybox-51b510a480b99d480bcf6919b8bae16eb1c61718.tar.gz
bc: in xc_read_line(), check ^C on NUL input bytes too
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/bc.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index febf51cfd..23b3521d4 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -2509,7 +2509,7 @@ static void xc_read_line(BcVec *vec, FILE *fp)
i = 0;
for (;;) {
char c = line_buf[i++];
- if (!c) break;
+ if (c == '\0') break;
if (bad_input_byte(c)) goto again;
}
bc_vec_string(vec, n, line_buf);
@@ -2522,14 +2522,16 @@ static void xc_read_line(BcVec *vec, FILE *fp)
bool bad_chars = 0;
do {
+ get_char:
#if ENABLE_FEATURE_BC_INTERACTIVE
if (G_interrupt) {
// ^C was pressed: ignore entire line, get another one
- bc_vec_pop_all(vec);
- goto intr;
+ goto again;
}
#endif
- do c = fgetc(fp); while (c == '\0');
+ c = fgetc(fp);
+ if (c == '\0')
+ goto get_char;
if (c == EOF) {
if (ferror(fp))
bb_perror_msg_and_die("input error");