Set _FIRST_ and _LAST_ macro values directly

This commit is contained in:
Adam Williamson 2022-06-20 13:10:26 -07:00
parent 953543a358
commit 8b0c9ee0a5
2 changed files with 82 additions and 1 deletions

View File

@ -0,0 +1,73 @@
From 6ce543f4999f21b363865bf845543326ba91406b Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Mon, 20 Jun 2022 12:07:14 -0700
Subject: [PATCH] Set _FIRST_ and _LAST_ macro values in disk.h directly
I may be missing something, but it seems impossible to use these
_FIRST_ and _LAST_ macros in practice as they are currently set.
You cannot use them at preprocessor time, because they will
always evaluate to 0 at that time, because the preprocessor does
not handle enums:
https://stackoverflow.com/questions/34677148
and you cannot really use them at build time, because if you do
something like this:
if (PED_PARTITION_LAST_FLAG > 17) {
PyModule_AddIntConstant(m, "PARTITION_ESP", PED_PARTITION_ESP);
}
the compiler still throws an undeclared identifier error if you
actually try and build the code against an older parted.
Unless anyone can suggest a way to use these properly as-is,
this is the best idea I can come up with: we just have to define
the _FIRST_ and _LAST_ values directly, and remember to keep
them in line when adding new entries to the enums.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
include/parted/disk.in.h | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h
index 672c4ee..fedcee9 100644
--- a/include/parted/disk.in.h
+++ b/include/parted/disk.in.h
@@ -47,8 +47,8 @@ enum _PedDiskFlag {
/* This flag controls whether the boot flag of a GPT PMBR is set */
PED_DISK_GPT_PMBR_BOOT=2,
};
-#define PED_DISK_FIRST_FLAG PED_DISK_CYLINDER_ALIGNMENT
-#define PED_DISK_LAST_FLAG PED_DISK_GPT_PMBR_BOOT
+#define PED_DISK_FIRST_FLAG 1
+#define PED_DISK_LAST_FLAG 2
/**
* Partition types
@@ -88,8 +88,8 @@ enum _PedPartitionFlag {
PED_PARTITION_BLS_BOOT=20,
PED_PARTITION_LINUX_HOME=21,
};
-#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_LINUX_HOME
+#define PED_PARTITION_FIRST_FLAG 1
+#define PED_PARTITION_LAST_FLAG 21
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
@@ -97,8 +97,8 @@ enum _PedDiskTypeFeature {
PED_DISK_TYPE_PARTITION_TYPE_ID=4, /**< supports partition type-ids */
PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */
};
-#define PED_DISK_TYPE_FIRST_FEATURE PED_DISK_TYPE_EXTENDED
-#define PED_DISK_TYPE_LAST_FEATURE PED_DISK_TYPE_PARTITION_TYPE_UUID
+#define PED_DISK_TYPE_FIRST_FEATURE 1
+#define PED_DISK_TYPE_LAST_FEATURE 8
struct _PedDisk;
struct _PedPartition;
--
2.36.1

View File

@ -1,7 +1,7 @@
Summary: The GNU disk partition manipulation program
Name: parted
Version: 3.5
Release: 2%{?dist}
Release: 3%{?dist}
License: GPLv3+
URL: http://www.gnu.org/software/parted
@ -17,6 +17,11 @@ Patch0003: 0003-libparted-add-swap-flag-for-DASD-label.patch
Patch0004: 0004-parted-Reset-the-filesystem-type-when-changing-the-i.patch
Patch0005: 0005-tests-t3200-type-change-now-passes.patch
# Set _FIRST_ and _LAST_ macro values directly (not from an enum
# value) so they work at preprocessor time:
# https://github.com/dcantrell/pyparted/issues/91
Patch1001: 0001-Set-_FIRST_-and-_LAST_-macro-values-in-disk.h-direct.patch
BuildRequires: gcc
BuildRequires: e2fsprogs-devel
@ -120,6 +125,9 @@ make check
%changelog
* Mon Jun 20 2022 Adam Williamson <awilliam@redhat.com> - 3.5-3
- Set _FIRST_ and _LAST_ macro values directly
* Tue May 17 2022 Brian C. Lane <bcl@redhat.com> - 3.5-2
- tests: t3200-type-change now passes (bcl)
- parted: Reset the filesystem type when changing the id/uuid (bcl)