From ad6d9fd50c12df567fc6ffe1a90d6775736a7695 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Wed, 12 Apr 2023 15:07:45 +0200 Subject: [PATCH] cfdisk: ask y/n before wipe Addresses: https://github.com/util-linux/util-linux/issues/2160 Signed-off-by: Karel Zak --- disk-utils/cfdisk.c | 17 ++++++++++++----- libfdisk/src/wipe.c | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) 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; } -- 2.47.2