From: Karel Zak Date: Wed, 12 Apr 2023 13:07:45 +0000 (+0200) Subject: cfdisk: ask y/n before wipe X-Git-Tag: v2.40-rc1~424^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad6d9fd50c12df567fc6ffe1a90d6775736a7695;p=thirdparty%2Futil-linux.git cfdisk: ask y/n before wipe Addresses: https://github.com/util-linux/util-linux/issues/2160 Signed-off-by: Karel Zak --- diff --git a/disk-utils/cfdisk.c b/disk-utils/cfdisk.c index 3d741c9743..5f4de8b487 100644 --- a/disk-utils/cfdisk.c +++ b/disk-utils/cfdisk.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #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) { diff --git a/libfdisk/src/wipe.c b/libfdisk/src/wipe.c index ab1d7b8519..017f191191 100644 --- a/libfdisk/src/wipe.c +++ b/libfdisk/src/wipe.c @@ -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; }