From 40af0db4cdadc50d9ba7ea77d8fa0689bf976f9f Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 5 Sep 2019 12:34:01 +0200 Subject: [PATCH] fdisk: fix quit dialog for non-libreadline version We need to clear stdin errors otherwise it returns EOF forever after CTRL+D. Reported-by: Lukas Czerner Signed-off-by: Karel Zak --- disk-utils/fdisk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c index 81334d06c6..0502fa33cf 100644 --- a/disk-utils/fdisk.c +++ b/disk-utils/fdisk.c @@ -109,6 +109,7 @@ int get_user_reply(const char *prompt, char *buf, size_t bufsz) if (is_interactive) rl_callback_handler_install(prompt, reply_linehandler); #endif + errno = 0; reply_running = 1; do { int rc; @@ -158,6 +159,7 @@ int get_user_reply(const char *prompt, char *buf, size_t bufsz) if (!*buf) { DBG(ASK, ul_debug("cancel by CTRL+D")); ret = -ECANCELED; + clearerr(stdin); goto done; } @@ -168,13 +170,13 @@ int get_user_reply(const char *prompt, char *buf, size_t bufsz) if (sz && *(buf + sz - 1) == '\n') *(buf + sz - 1) = '\0'; - DBG(ASK, ul_debug("user's reply: >>>%s<<<", buf)); done: #ifdef HAVE_LIBREADLINE if (is_interactive) rl_callback_handler_remove(); #endif sigaction(SIGINT, &oldact, NULL); + DBG(ASK, ul_debug("user's reply: >>>%s<<< [rc=%d]", buf, ret)); return ret; } -- 2.47.2