From d2c47697e149d406af266c9d59f140c24ee890ad Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 11 Sep 2014 15:28:15 +0200 Subject: [PATCH] sfdisk: add --verify Signed-off-by: Karel Zak --- disk-utils/fdisk-list.c | 12 +++--- disk-utils/fdisk-list.h | 4 +- disk-utils/fdisk.c | 4 +- disk-utils/sfdisk.c | 91 ++++++++++++++++++++++++++++++++++++----- 4 files changed, 91 insertions(+), 20 deletions(-) diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c index 3d26f8b7a6..708e6939a9 100644 --- a/disk-utils/fdisk-list.c +++ b/disk-utils/fdisk-list.c @@ -220,7 +220,7 @@ char *next_proc_partition(FILE **f) return NULL; } -int print_device_pt(struct fdisk_context *cxt, char *device, int warnme) +int print_device_pt(struct fdisk_context *cxt, char *device, int warnme, int verify) { if (fdisk_assign_device(cxt, device, 1) != 0) { /* read-only */ if (warnme || errno == EACCES) @@ -230,14 +230,16 @@ int print_device_pt(struct fdisk_context *cxt, char *device, int warnme) list_disk_geometry(cxt); - if (fdisk_has_label(cxt)) + if (fdisk_has_label(cxt)) { list_disklabel(cxt); - + if (verify) + fdisk_verify_disklabel(cxt); + } fdisk_deassign_device(cxt, 1); return 0; } -void print_all_devices_pt(struct fdisk_context *cxt) +void print_all_devices_pt(struct fdisk_context *cxt, int verify) { FILE *f = NULL; int ct = 0; @@ -246,7 +248,7 @@ void print_all_devices_pt(struct fdisk_context *cxt) while ((dev = next_proc_partition(&f))) { if (ct) fputs("\n\n", stdout); - if (print_device_pt(cxt, dev, 0) == 0) + if (print_device_pt(cxt, dev, 0, verify) == 0) ct++; free(dev); } diff --git a/disk-utils/fdisk-list.h b/disk-utils/fdisk-list.h index dc61c58710..0a6ff734c9 100644 --- a/disk-utils/fdisk-list.h +++ b/disk-utils/fdisk-list.h @@ -5,7 +5,7 @@ extern void list_disklabel(struct fdisk_context *cxt); extern void list_disk_geometry(struct fdisk_context *cxt); extern char *next_proc_partition(FILE **f); -extern int print_device_pt(struct fdisk_context *cxt, char *device, int warnme); -extern void print_all_devices_pt(struct fdisk_context *cxt); +extern int print_device_pt(struct fdisk_context *cxt, char *device, int warnme, int verify); +extern void print_all_devices_pt(struct fdisk_context *cxt, int verify); #endif /* UTIL_LINUX_FDISK_LIST_H */ diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c index ab48303025..b7063b81d6 100644 --- a/disk-utils/fdisk.c +++ b/disk-utils/fdisk.c @@ -804,9 +804,9 @@ int main(int argc, char **argv) if (argc > optind) { int k; for (k = optind; k < argc; k++) - print_device_pt(cxt, argv[k], 1); + print_device_pt(cxt, argv[k], 1, 0); } else - print_all_devices_pt(cxt); + print_all_devices_pt(cxt, 0); break; case ACT_SHOWSIZE: diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index f650ddac3a..b4ac71ed78 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -59,8 +59,7 @@ UL_DEBUG_DEFINE_MASKANEMS(sfdisk) = UL_DEBUG_EMPTY_MASKNAMES; #define ON_DBG(m, x) __UL_DBG_CALL(sfdisk, SFDISKPROG_DEBUG_, m, x) enum { - ACT_FDISK = 0, /* default */ - + ACT_FDISK = 1, ACT_ACTIVATE, ACT_CHANGE_ID, ACT_DUMP, @@ -76,6 +75,8 @@ struct sfdisk { const char *label; /* --label