]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add fdisk_has_user_device_properties()
authorKarel Zak <kzak@redhat.com>
Fri, 30 Aug 2013 11:06:15 +0000 (13:06 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 16 Sep 2013 14:47:08 +0000 (16:47 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
fdisks/fdisk.c
libfdisk/src/alignment.c
libfdisk/src/libfdisk.h

index a71815b04bba1ff792b251a9c58c8438a51c1781..92bacf623eeecb0a39811eea080bf6620df50848 100644 (file)
@@ -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);
index 6df785a9474fc6e5213e3b024f8b0fcf24e7cdd5..21dfa679f72c6bf279e483531b091998c55b76f8 100644 (file)
@@ -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)
index 44f2a914658716f8893845dd926883e56d9bd595..1e1da6bd6a2dfeceac8c1ad9352273ba744280fd 100644 (file)
@@ -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 */