]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fdisk: differentiate between +<sector> and +<size>{M,G,...}
authorKarel Zak <kzak@redhat.com>
Wed, 10 Jun 2015 10:45:53 +0000 (12:45 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 10 Jun 2015 11:06:15 +0000 (13:06 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/fdisk.c
libfdisk/src/dos.c
libfdisk/src/gpt.c

index 63eacad4f121b423fbdf8648da080bbf2ee4f3a8..a4130afb9e7c56a0ff478c146700430ab9f472b1 100644 (file)
@@ -311,7 +311,7 @@ static int ask_offset(struct fdisk_context *cxt,
                                num, sig, pwr,
                                sig ? "relative" : "absolute"));
                if (num >= low && num <= high) {
-                       if (sig)
+                       if (sig && pwr)
                                fdisk_ask_number_set_relative(ask, 1);
                        return fdisk_ask_number_set_result(ask, num);
                }
index 95420ab800e258bf003498c997c4496685c8268f..52836ebf11b608127742952b7e6cfa19f4ca3ee5 100644 (file)
@@ -1197,11 +1197,10 @@ static int add_partition(struct fdisk_context *cxt, size_t n,
                        stop = fdisk_ask_number_get_result(ask);
                        isrel = fdisk_ask_number_is_relative(ask);
 
-                       if (isrel && stop == start) {
-                               fdisk_warnx(cxt, _("Value out of range."));
-                               continue;       /* +0 */
-                       }
-                       break;
+                       if (stop >= start && stop <= limit)
+                               break;
+
+                       fdisk_warnx(cxt, _("Value out of range."));
                }
 
                if (fdisk_use_cylinders(cxt)) {
index e9798bdf67c26b2103168d0fcd8a3b5a73091602..007840f602606124ef5f5966a6765006c285d027 100644 (file)
@@ -2164,11 +2164,6 @@ static int gpt_add_partition(
 
                        user_l = fdisk_ask_number_get_result(ask);
                        if (fdisk_ask_number_is_relative(ask)) {
-                               if (user_l == user_f) {
-                                       fdisk_warnx(cxt, _("Value out of range."));
-                                       continue;       /* +0 */
-                               }
-
                                user_l = fdisk_align_lba_in_range(cxt, user_l, user_f, dflt_l);
                                if (user_l > user_f)
                                        user_l -= 1;
@@ -2176,6 +2171,8 @@ static int gpt_add_partition(
 
                        if (user_l >= user_f && user_l <= disk_l)
                                break;
+
+                       fdisk_warnx(cxt, _("Value out of range."));
                }
        }