From: Karel Zak Date: Tue, 5 Mar 2013 10:15:54 +0000 (+0100) Subject: libfdisk: add disk_partition_is_used() X-Git-Tag: v2.23-rc1~96 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=225592d4a38b118328a1975e315897edd43ec703;p=thirdparty%2Futil-linux.git libfdisk: add disk_partition_is_used() Signed-off-by: Karel Zak --- diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index 179b905b27..31a7e50ba6 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -543,24 +543,15 @@ read_int(struct fdisk_context *cxt, } int -get_partition_dflt(struct fdisk_context *cxt, int warn, int max, int dflt) { - struct pte *pe; +get_partition_dflt(struct fdisk_context *cxt, int warn, int max, int dflt) +{ int i; i = read_int(cxt, 1, dflt, max, 0, _("Partition number")) - 1; - pe = &ptes[i]; - - if (warn && !fdisk_is_disklabel(cxt, GPT)) { - if ((!fdisk_is_disklabel(cxt, SUN) && - !fdisk_is_disklabel(cxt, SGI) && !pe->part_table->sys_ind) - || (fdisk_is_disklabel(cxt, SUN) && - sun_is_empty_type(cxt, i)) - || (fdisk_is_disklabel(cxt, SGI) && - (!sgi_get_num_sectors(cxt, i)))) - fprintf(stderr, - _("Warning: partition %d has empty type\n"), - i+1); - } + + if (warn && !fdisk_partition_is_used(cxt, i)) + fdisk_warnx(cxt, _("Warning: partition %d is unused"), i + 1); + return i; } diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index d8ce279db3..cc21f759ec 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -267,6 +267,23 @@ int fdisk_partition_get_status(struct fdisk_context *cxt, return rc; } +/** + * @cxt: fdisk context + * @partnum: partition number + * + * Returns: 1 on success if partition used otherwise 0. + */ +int fdisk_partition_is_used(struct fdisk_context *cxt, size_t partnum) +{ + int status, rc; + + rc = fdisk_partition_get_status(cxt, partnum, &status); + if (rc) + return 0; + + return status & FDISK_PARTSTAT_USED; +} + /** * fdisk_partition_taggle_flag: * @cxt: fdisk context diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index 87dad95ac2..92c03b6932 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -121,6 +121,7 @@ extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed); extern int fdisk_label_is_changed(struct fdisk_label *lb); extern int fdisk_partition_get_status(struct fdisk_context *cxt, size_t partnum, int *status); +extern int fdisk_partition_is_used(struct fdisk_context *cxt, size_t partnum); extern int fdisk_partition_toggle_flag(struct fdisk_context *cxt, size_t partnum, unsigned long flag); /* alignment.c */