123 lines
4.2 KiB
Diff
123 lines
4.2 KiB
Diff
|
From f3b4015e216a3733082e71ff930526f3e8bf0c26 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= <mail@nh2.me>
|
||
|
Date: Fri, 11 May 2018 21:09:05 +0200
|
||
|
Subject: [PATCH 86/92] mkpart: Allow negative start value when FS-TYPE is not
|
||
|
given
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
The manual had long documented that negative values are
|
||
|
allowed for both start and end values, but until now negative
|
||
|
start values were rejected if FS-TYPE was not given.
|
||
|
|
||
|
Example:
|
||
|
|
||
|
# parted --script -a optimal /dev/loop0 -- mklabel gpt mkpart primary ext4 -5MiB 100%
|
||
|
(succeeds)
|
||
|
|
||
|
# parted --script -a optimal /dev/loop0 -- mklabel gpt mkpart primary -5MiB 100%
|
||
|
parted: invalid token: -5MiB
|
||
|
Error: Expecting a file system type.
|
||
|
|
||
|
This commit fixes the latter error.
|
||
|
The issue was an insufficient lookahead in command line parsing,
|
||
|
looking only for digits when skipping over FS-TYPE.
|
||
|
The fix is including the minus '-' in the lookahead.
|
||
|
|
||
|
Originally reported as Debian bug #880035:
|
||
|
|
||
|
"parted: fails to use negative start value for 'mkpart' command without specyfying FS-TYPE"
|
||
|
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=880035
|
||
|
|
||
|
Signed-off-by: Niklas Hambüchen <mail@nh2.me>
|
||
|
---
|
||
|
parted/parted.c | 2 +-
|
||
|
tests/Makefile.am | 1 +
|
||
|
tests/t0213-mkpart-start-negative.sh | 48 ++++++++++++++++++++++++++++
|
||
|
4 files changed, 52 insertions(+), 1 deletion(-)
|
||
|
create mode 100755 tests/t0213-mkpart-start-negative.sh
|
||
|
|
||
|
diff --git a/parted/parted.c b/parted/parted.c
|
||
|
index b5e3b97..88f32b9 100644
|
||
|
--- a/parted/parted.c
|
||
|
+++ b/parted/parted.c
|
||
|
@@ -682,7 +682,7 @@ do_mkpart (PedDevice** dev, PedDisk** diskp)
|
||
|
|
||
|
peek_word = command_line_peek_word ();
|
||
|
if (part_type == PED_PARTITION_EXTENDED
|
||
|
- || (peek_word && isdigit (peek_word[0]))) {
|
||
|
+ || (peek_word && (isdigit (peek_word[0]) || peek_word[0] == '-'))) {
|
||
|
fs_type = NULL;
|
||
|
} else {
|
||
|
if (!command_line_get_fs_type (_("File system type?"),
|
||
|
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||
|
index a840304..3851983 100644
|
||
|
--- a/tests/Makefile.am
|
||
|
+++ b/tests/Makefile.am
|
||
|
@@ -25,6 +25,7 @@ TESTS = \
|
||
|
t0210-gpt-resized-partition-entry-array.sh \
|
||
|
t0211-gpt-rewrite-header.sh \
|
||
|
t0212-gpt-many-partitions.sh \
|
||
|
+ t0213-mkpart-start-negative.sh \
|
||
|
t0220-gpt-msftres.sh \
|
||
|
t0250-gpt.sh \
|
||
|
t0251-gpt-unicode.sh \
|
||
|
diff --git a/tests/t0213-mkpart-start-negative.sh b/tests/t0213-mkpart-start-negative.sh
|
||
|
new file mode 100755
|
||
|
index 0000000..182ef0c
|
||
|
--- /dev/null
|
||
|
+++ b/tests/t0213-mkpart-start-negative.sh
|
||
|
@@ -0,0 +1,48 @@
|
||
|
+#!/bin/sh
|
||
|
+# Make sure parted mkpart ends the partition one sector before the specified
|
||
|
+# value if end is specified with IEC units.
|
||
|
+
|
||
|
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
|
||
|
+
|
||
|
+# This program is free software; you can redistribute it and/or modify
|
||
|
+# it under the terms of the GNU General Public License as published by
|
||
|
+# the Free Software Foundation; either version 3 of the License, or
|
||
|
+# (at your option) any later version.
|
||
|
+
|
||
|
+# This program is distributed in the hope that it will be useful,
|
||
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+# GNU General Public License for more details.
|
||
|
+
|
||
|
+# You should have received a copy of the GNU General Public License
|
||
|
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
+
|
||
|
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
|
||
|
+
|
||
|
+require_512_byte_sector_size_
|
||
|
+n_mbs=8
|
||
|
+dev=dev-file
|
||
|
+
|
||
|
+dd if=/dev/null of=$dev bs=1M seek=$n_mbs || fail=1
|
||
|
+# start negative, end positive
|
||
|
+parted --align=none -s $dev -- mklabel gpt mkpart p1 -7MiB 2MiB > err 2>&1 || fail=1
|
||
|
+compare /dev/null err || fail=1 # expect no output
|
||
|
+
|
||
|
+# start negative, end negative
|
||
|
+parted --align=none -s $dev -- mkpart p2 -6MiB -5MiB > err 2>&1 || fail=1
|
||
|
+compare /dev/null err || fail=1 # expect no output
|
||
|
+
|
||
|
+# check boundaries of the partitions
|
||
|
+parted -m -s $dev u s p > out || fail=1
|
||
|
+
|
||
|
+# prepare expected output
|
||
|
+cat <<EOF > exp || framework_failure
|
||
|
+1:2048s:4095s:2048s::p1:;
|
||
|
+2:4096s:6143s:2048s::p2:;
|
||
|
+EOF
|
||
|
+
|
||
|
+# compare expected and actual outputs
|
||
|
+sed -e "1,2d" out > k; mv k out
|
||
|
+compare exp out || fail=1
|
||
|
+
|
||
|
+Exit $fail
|
||
|
--
|
||
|
2.17.1
|
||
|
|