]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fdisk: fix quit dialog for non-libreadline version
authorKarel Zak <kzak@redhat.com>
Thu, 5 Sep 2019 10:34:01 +0000 (12:34 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 5 Sep 2019 10:34:01 +0000 (12:34 +0200)
We need to clear stdin errors otherwise it returns EOF forever after
CTRL+D.

Reported-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/fdisk.c

index 81334d06c6f6243b4ff7069f287d2f7ac9b19dd0..0502fa33cf8a218d9dcb0ae6e113998dc7f40dcc 100644 (file)
@@ -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;
 }