summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian C. Lane <bcl@redhat.com>2022-05-10 15:04:12 -0700
committerBrian C. Lane <bcl@redhat.com>2023-02-06 10:44:21 -0800
commit9b009985da2e5eee5b5c179acfafab3aa1624f8b (patch)
tree0d5cfd9706bdf79866ff9b24b03fb6e93b480c9a
parentcaa588269709659d5cf51bf64c559e193f371de4 (diff)
downloadparted-9b009985da2e5eee5b5c179acfafab3aa1624f8b.tar.gz
libparted: Fix problem with creating 1s partitions
There was a 1-off error in _partition_get_overlap_constraint that prevented partitions from being created in 1s free space. You could create 1s partitions as long they were done in order, but not after leaving 'holes'. This fixes this and adds tests for it on msdos and gpt disklabels.
-rw-r--r--libparted/disk.c2
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/t9024-msdos-1s-partition.sh36
-rw-r--r--tests/t9025-gpt-1s-partition.sh36
4 files changed, 75 insertions, 1 deletions
diff --git a/libparted/disk.c b/libparted/disk.c
index 45f35fd..e1a3489 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -1960,7 +1960,7 @@ _partition_get_overlap_constraint (PedPartition* part, PedGeometry* geom)
if (walk)
max_end = walk->geom.start - 1;
- if (min_start >= max_end)
+ if (min_start > max_end)
return NULL;
ped_geometry_init (&free_space, part->disk->dev,
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1d109d7..fa27b44 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -91,6 +91,8 @@ TESTS = \
t9021-maxima.sh \
t9022-one-unit-snap.sh \
t9023-value-lt-one.sh \
+ t9024-msdos-1s-partition.sh \
+ t9025-gpt-1s-partition.sh \
t9030-align-check.sh \
t9040-many-partitions.sh \
t9041-undetected-in-use-16th-partition.sh \
diff --git a/tests/t9024-msdos-1s-partition.sh b/tests/t9024-msdos-1s-partition.sh
new file mode 100644
index 0000000..7115156
--- /dev/null
+++ b/tests/t9024-msdos-1s-partition.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Test creating 1s partitions in 1s free space
+
+# Copyright (C) 2022 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
+
+dev=loop-file
+
+# create device
+truncate --size 10MiB "$dev" || fail=1
+
+# create msdos label and some partitions with 1s free space between
+parted --script "$dev" mklabel msdos > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary ext4 64s 128s > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary ext4 130s 200s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+# Free space is at 129s
+parted --script "$dev" mkpart primary ext4 129s 129s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+Exit $fail
diff --git a/tests/t9025-gpt-1s-partition.sh b/tests/t9025-gpt-1s-partition.sh
new file mode 100644
index 0000000..c97ab8b
--- /dev/null
+++ b/tests/t9025-gpt-1s-partition.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Test creating 1s partitions in 1s free space
+
+# Copyright (C) 2022 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
+
+dev=loop-file
+
+# create device
+truncate --size 10MiB "$dev" || fail=1
+
+# create msdos label and some partitions with 1s free space between
+parted --script "$dev" mklabel gpt > out 2>&1 || fail=1
+parted --script "$dev" mkpart p1 ext4 64s 128s > out 2>&1 || fail=1
+parted --script "$dev" mkpart p2 ext4 130s 200s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+# Free space is at 129s
+parted --script "$dev" mkpart p3 ext4 129s 129s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+Exit $fail