Fix infinite loop caused by search prompt - sacc - sacc(omys), simple console g… | |
git clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
LICENSE | |
--- | |
commit cef484cbcf0ba83757f853f235a6cc7497448fa2 | |
parent 90a9d3c81f27588c62faa43f22d946740042a3ce | |
Author: Rainer Holzner <[email protected]> | |
Date: Fri, 20 Dec 2024 18:01:52 +0100 | |
Fix infinite loop caused by search prompt | |
This fixes an infinite loop when the user selects item type 7 (IND), | |
enters 1 or more characters and decides to cancel the search prompt | |
by pressing Ctrl+D without deleting the input line. | |
Note that the fixed version requires the user to press Ctrl-D twice | |
in this case. | |
Diffstat: | |
M ui_ti.c | 3 ++- | |
M ui_txt.c | 2 +- | |
2 files changed, 3 insertions(+), 2 deletions(-) | |
--- | |
diff --git a/ui_ti.c b/ui_ti.c | |
@@ -97,7 +97,7 @@ uiprompt(char *fmt, ...) | |
putp(tparm(restore_cursor, 0, 0, 0, 0, 0, 0, 0, 0, 0)); | |
fflush(stdout); | |
- if (r == -1) { | |
+ if (r == -1 || feof(stdin)) { | |
clearerr(stdin); | |
clear(&input); | |
} else if (input[r - 1] == '\n') { | |
@@ -531,6 +531,7 @@ uiselectitem(Item *entry) | |
case _key_searchprev: | |
searchinline(searchstr, entry, -1); | |
continue; | |
+ case EOF: | |
case 0x04: | |
case _key_quit: | |
quit: | |
diff --git a/ui_txt.c b/ui_txt.c | |
@@ -124,7 +124,7 @@ uiprompt(char *fmt, ...) | |
mbsprint(bufout, columns); | |
fflush(stdout); | |
- if ((r = getline(&input, &n, stdin)) == -1) { | |
+ if ((r = getline(&input, &n, stdin)) == -1 || feof(stdin)) { | |
clearerr(stdin); | |
clear(&input); | |
putchar('\n'); |