]> 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>
Tue, 7 Oct 2014 12:55:31 +0000 (14:55 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/fdisk.c
libfdisk/src/ask.c

index 5fc4a4d814b6b7a7df20dc663e57e0c17911879a..ab483030257bee7913b22099a0c45eb42b22256d 100644 (file)
@@ -338,10 +338,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 eb386ace9c540932db196740c547a52bee79d147..c6e02f348c405fabf2afa2502ffff88b5a9bb1c3 100644 (file)
@@ -489,7 +489,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);