[parted-devel] [PATCH] libparted: Fix problem with creating 1s partitions

Brian C. Lane bcl at redhat.com
Tue May 10 23:28:48 BST 2022


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.
---
 libparted/disk.c                  |  2 +-
 tests/Makefile.am                 |  2 ++
 tests/t9024-msdos-1s-partition.sh | 36 +++++++++++++++++++++++++++++++
 tests/t9025-gpt-1s-partition.sh   | 36 +++++++++++++++++++++++++++++++
 4 files changed, 75 insertions(+), 1 deletion(-)
 create mode 100644 tests/t9024-msdos-1s-partition.sh
 create mode 100644 tests/t9025-gpt-1s-partition.sh

diff --git a/libparted/disk.c b/libparted/disk.c
index 3bf7634..02febd8 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -1794,7 +1794,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 5cb7aa3..5ea393f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -90,6 +90,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
-- 
2.34.3




More information about the parted-devel mailing list