bc: in xc_read_line(), check ^C on NUL input bytes too
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
8797adc1c6
commit
51b510a480
@ -2509,7 +2509,7 @@ static void xc_read_line(BcVec *vec, FILE *fp)
|
|||||||
i = 0;
|
i = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
char c = line_buf[i++];
|
char c = line_buf[i++];
|
||||||
if (!c) break;
|
if (c == '\0') break;
|
||||||
if (bad_input_byte(c)) goto again;
|
if (bad_input_byte(c)) goto again;
|
||||||
}
|
}
|
||||||
bc_vec_string(vec, n, line_buf);
|
bc_vec_string(vec, n, line_buf);
|
||||||
@ -2522,14 +2522,16 @@ static void xc_read_line(BcVec *vec, FILE *fp)
|
|||||||
bool bad_chars = 0;
|
bool bad_chars = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
get_char:
|
||||||
#if ENABLE_FEATURE_BC_INTERACTIVE
|
#if ENABLE_FEATURE_BC_INTERACTIVE
|
||||||
if (G_interrupt) {
|
if (G_interrupt) {
|
||||||
// ^C was pressed: ignore entire line, get another one
|
// ^C was pressed: ignore entire line, get another one
|
||||||
bc_vec_pop_all(vec);
|
goto again;
|
||||||
goto intr;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
do c = fgetc(fp); while (c == '\0');
|
c = fgetc(fp);
|
||||||
|
if (c == '\0')
|
||||||
|
goto get_char;
|
||||||
if (c == EOF) {
|
if (c == EOF) {
|
||||||
if (ferror(fp))
|
if (ferror(fp))
|
||||||
bb_perror_msg_and_die("input error");
|
bb_perror_msg_and_die("input error");
|
||||||
|
Loading…
Reference in New Issue
Block a user