From: Karel Zak Date: Wed, 13 Aug 2014 22:09:48 +0000 (+0200) Subject: libfdisk: cleanup label geometry API X-Git-Tag: v2.26-rc1~516 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=72d2965c4470b2c740c409db37ed0369bbea98ee;p=thirdparty%2Futil-linux.git libfdisk: cleanup label geometry API Signed-off-by: Karel Zak --- diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c index 9d6230f70c..4a9262905f 100644 --- a/disk-utils/fdisk.c +++ b/disk-utils/fdisk.c @@ -503,6 +503,7 @@ void change_partition_type(struct fdisk_context *cxt) void list_disk_geometry(struct fdisk_context *cxt) { char *id = NULL; + struct fdisk_label *lb = fdisk_get_label(cxt, NULL); uint64_t bytes = cxt->total_sectors * cxt->sector_size; char *strsz = size_to_human_string(SIZE_SUFFIX_SPACE | SIZE_SUFFIX_3LETTER, bytes); @@ -512,7 +513,7 @@ void list_disk_geometry(struct fdisk_context *cxt) bytes, (uintmax_t) cxt->total_sectors); free(strsz); - if (fdisk_require_geometry(cxt) || fdisk_use_cylinders(cxt)) + if (fdisk_label_require_geometry(lb) || fdisk_use_cylinders(cxt)) fdisk_info(cxt, _("Geometry: %d heads, %llu sectors/track, %llu cylinders"), cxt->geom.heads, cxt->geom.sectors, cxt->geom.cylinders); diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c index 03f358639e..c6e99eef4c 100644 --- a/libfdisk/src/context.c +++ b/libfdisk/src/context.c @@ -690,4 +690,22 @@ const char *fdisk_get_devname(struct fdisk_context *cxt) } +int fdisk_missing_geometry(struct fdisk_context *cxt) +{ + int rc; + + assert(cxt); + + if (!cxt || !cxt->label) + return 0; + + rc = (fdisk_label_require_geometry(cxt->label) && + (!cxt->geom.heads || !cxt->geom.sectors + || !cxt->geom.cylinders)); + + if (rc && !fdisk_is_listonly(cxt)) + fdisk_warnx(cxt, _("Incomplete geometry setting.")); + + return rc; +} diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 2d5705e27e..8d70c4ce03 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -380,6 +380,7 @@ struct fdisk_context { /* context.c */ extern int __fdisk_switch_label(struct fdisk_context *cxt, struct fdisk_label *lb); +extern int fdisk_missing_geometry(struct fdisk_context *cxt); /* alignment.c */ sector_t fdisk_scround(struct fdisk_context *cxt, sector_t num); diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index 36e4688d99..c69bc170a1 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -53,6 +53,19 @@ const char *fdisk_label_get_name(struct fdisk_label *lb) return lb ? lb->name : NULL; } +/** + * fdisk_label_require_geometry: + * @lb: label + * + * Returns: 1 if label requires CHS geometry + */ +int fdisk_label_require_geometry(struct fdisk_label *lb) +{ + assert(lb); + + return lb->flags & FDISK_LABEL_FL_REQUIRE_GEOMETRY ? 1 : 0; +} + /** * fdisk_write_disklabel: @@ -71,29 +84,6 @@ int fdisk_write_disklabel(struct fdisk_context *cxt) return cxt->label->op->write(cxt); } -int fdisk_require_geometry(struct fdisk_context *cxt) -{ - assert(cxt); - - return cxt->label - && cxt->label->flags & FDISK_LABEL_FL_REQUIRE_GEOMETRY ? 1 : 0; -} - -int fdisk_missing_geometry(struct fdisk_context *cxt) -{ - int rc; - - assert(cxt); - - rc = (fdisk_require_geometry(cxt) && - (!cxt->geom.heads || !cxt->geom.sectors - || !cxt->geom.cylinders)); - - if (rc && !fdisk_is_listonly(cxt)) - fdisk_warnx(cxt, _("Incomplete geometry setting.")); - - return rc; -} /** * fdisk_get_fields: diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index 8caf60ef7d..1db04b7796 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -160,9 +160,7 @@ enum { }; const char *fdisk_label_get_name(struct fdisk_label *lb); - -extern int fdisk_require_geometry(struct fdisk_context *cxt); -extern int fdisk_missing_geometry(struct fdisk_context *cxt); +int fdisk_label_require_geometry(struct fdisk_label *lb); extern int fdisk_write_disklabel(struct fdisk_context *cxt);