diff options
author | Karel Zak | 2013-08-30 13:06:15 +0200 |
---|---|---|
committer | Karel Zak | 2013-09-16 16:47:08 +0200 |
commit | 6bcd192c7bc79539d80399be842cd68701955bf6 (patch) | |
tree | 49e41e68c2ece4cdacf7410d040d305500e80cd2 | |
parent | fdisk: cleanup header file (diff) | |
download | kernel-qcow2-util-linux-6bcd192c7bc79539d80399be842cd68701955bf6.tar.gz kernel-qcow2-util-linux-6bcd192c7bc79539d80399be842cd68701955bf6.tar.xz kernel-qcow2-util-linux-6bcd192c7bc79539d80399be842cd68701955bf6.zip |
libfdisk: add fdisk_has_user_device_properties()
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | fdisks/fdisk.c | 21 | ||||
-rw-r--r-- | libfdisk/src/alignment.c | 9 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h | 3 |
3 files changed, 21 insertions, 12 deletions
diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index a71815b04..92bacf623 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -348,7 +348,6 @@ static sector_t get_dev_blocks(char *dev) int main(int argc, char **argv) { int c, optl = 0, opts = 0; - unsigned long sector_size = 0; struct fdisk_context *cxt; struct fdisk_label *lb; @@ -367,16 +366,14 @@ int main(int argc, char **argv) while ((c = getopt(argc, argv, "b:c::C:hH:lsS:u::vV")) != -1) { switch (c) { case 'b': - /* Ugly: this sector size is really per device, - so cannot be combined with multiple disks, - and te same goes for the C/H/S options. - */ - sector_size = strtou32_or_err(optarg, _("invalid sector size argument")); - if (sector_size != 512 && sector_size != 1024 && - sector_size != 2048 && sector_size != 4096) + { + size_t sz = strtou32_or_err(optarg, + _("invalid sector size argument")); + if (sz != 512 && sz != 1024 && sz != 2048 && sz != 4096) usage(stderr); - fdisk_save_user_sector_size(cxt, sector_size, sector_size); + fdisk_save_user_sector_size(cxt, sz, sz); break; + } case 'C': fdisk_save_user_geometry(cxt, strtou32_or_err(optarg, @@ -434,9 +431,9 @@ int main(int argc, char **argv) } - if (sector_size && argc-optind != 1) - printf(_("Warning: the -b (set sector size) option should" - " be used with one specified device\n")); + if (argc-optind != 1 && fdisk_has_user_device_properties(cxt)) + warnx(_("The device properties (sector size and geometry) should" + " be used with one specified device only.")); if (optl) { fdisk_context_enable_listonly(cxt, 1); diff --git a/libfdisk/src/alignment.c b/libfdisk/src/alignment.c index 6df785a94..21dfa679f 100644 --- a/libfdisk/src/alignment.c +++ b/libfdisk/src/alignment.c @@ -196,6 +196,15 @@ int fdisk_save_user_sector_size(struct fdisk_context *cxt, return 0; } +int fdisk_has_user_device_properties(struct fdisk_context *cxt) +{ + return (cxt->user_pyh_sector + || cxt->user_log_sector + || cxt->user_geom.heads + || cxt->user_geom.sectors + || cxt->user_geom.cylinders); +} + int fdisk_apply_user_device_properties(struct fdisk_context *cxt) { if (!cxt) diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index 44f2a9146..1e1da6bd6 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -153,6 +153,9 @@ extern int fdisk_save_user_geometry(struct fdisk_context *cxt, extern int fdisk_save_user_sector_size(struct fdisk_context *cxt, unsigned int phy, unsigned int log); + +extern int fdisk_has_user_device_properties(struct fdisk_context *cxt); + extern int fdisk_reread_partition_table(struct fdisk_context *cxt); /* dos.c */ |