From: Karel Zak Date: Thu, 5 Sep 2019 10:34:01 +0000 (+0200) Subject: fdisk: fix quit dialog for non-libreadline version X-Git-Tag: v2.35-rc1~236 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=40af0db4cdadc50d9ba7ea77d8fa0689bf976f9f;p=thirdparty%2Futil-linux.git 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 --- 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; }