]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: make yes/no dialogs more robust
authorKarel Zak <kzak@redhat.com>
Wed, 10 Sep 2014 10:51:25 +0000 (12:51 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 24 Oct 2014 09:10:06 +0000 (11:10 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/fdisk.c
libfdisk/src/ask.c

index fed7a5745edb4c6993b2ac47753fa7dfb1754152..e74bf1f1067a81a57dae7da1b5227a773e2b5a30 100644 (file)
@@ -326,10 +326,18 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
                break;
        case FDISK_ASKTYPE_YESNO:
                fputc('\n', stdout);
-               fputs(fdisk_ask_get_query(ask), stdout);
-               rc = get_user_reply(cxt, _(" [Y]es/[N]o: "), buf, sizeof(buf));
-               if (rc == 0)
-                       fdisk_ask_yesno_set_result(ask, rpmatch(buf));
+               do {
+                       int x;
+                       fputs(fdisk_ask_get_query(ask), stdout);
+                       rc = get_user_reply(cxt, _(" [Y]es/[N]o: "), buf, sizeof(buf));
+                       if (rc)
+                               break;
+                       x = rpmatch(buf);
+                       if (x == 1 || x == 0) {
+                               fdisk_ask_yesno_set_result(ask, x);
+                               break;
+                       }
+               } while(1);
                DBG(ASK, ul_debug("yes-no ask: reply '%s' [rc=%d]", buf, rc));
                break;
        case FDISK_ASKTYPE_STRING:
index da5746c6821a0b05748ab3cbc0b11285bf19ad4a..8465d26ef78799d133e5eb6d3bd67de65601b6d5 100644 (file)
@@ -480,7 +480,7 @@ int fdisk_ask_yesno(struct fdisk_context *cxt,
        if (!rc)
                rc = fdisk_do_ask(cxt, ask);
        if (!rc)
-               *result = fdisk_ask_yesno_get_result(ask);
+               *result = fdisk_ask_yesno_get_result(ask) == 1 ? 1 : 0;
 
        DBG(ASK, ul_debugobj(ask, "result: %d [rc=%d]\n", *result, rc));
        fdisk_free_ask(ask);