]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
cfdisk: ask y/n before wipe
authorKarel Zak <kzak@redhat.com>
Wed, 12 Apr 2023 13:07:45 +0000 (15:07 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 12 Apr 2023 13:07:45 +0000 (15:07 +0200)
Addresses: https://github.com/util-linux/util-linux/issues/2160
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/cfdisk.c
libfdisk/src/wipe.c

index 3d741c9743995da41c466c9b20035d9df4625c23..5f4de8b487034c066791b0db50d2cf2a8ee633ea 100644 (file)
@@ -21,6 +21,7 @@
 #include <assert.h>
 #include <libsmartcols.h>
 #include <sys/ioctl.h>
+#include <rpmatch.h>
 #include <libfdisk.h>
 
 #ifdef HAVE_LIBMOUNT
@@ -2587,11 +2588,17 @@ static int ui_run(struct cfdisk *cf)
        DBG(UI, ul_debug("start cols=%zu, lines=%zu", ui_cols, ui_lines));
 
        if (fdisk_get_collision(cf->cxt)) {
-               ui_warnx(_("Device already contains a %s signature; it will be removed by a write command."),
-                               fdisk_get_collision(cf->cxt));
-               fdisk_enable_wipe(cf->cxt, 1);
-               ui_hint(_("Press a key to continue."));
-               getch();
+               ui_warnx(_("Device already contains a %s signature."), fdisk_get_collision(cf->cxt));
+               if (fdisk_is_readonly(cf->cxt)) {
+                       ui_hint(_("Press a key to continue."));
+                       getch();
+               } else {
+                       char buf[64] = { 0 };
+                       rc = ui_get_string(_("Do you want to remove it? [Y]es/[N]o: "), NULL,
+                                       buf, sizeof(buf));
+                       fdisk_enable_wipe(cf->cxt,
+                                       rc > 0 && rpmatch(buf) == RPMATCH_YES ? 1 : 0);
+               }
        }
 
        if (!fdisk_has_label(cf->cxt) || cf->zero_start) {
index ab1d7b8519d9b45d8f3f8169e9e2fb0e0cdec8f2..017f191191e504d3f721e490d74409f94d7069a5 100644 (file)
@@ -75,6 +75,7 @@ int fdisk_set_wipe_area(struct fdisk_context *cxt,
                        free(wp);
                        return 1;
                }
+               DBG(WIPE, ul_debug("not requested"));
                return 0;
        }