From bbdcc14b1c2078c98dbd02cc498423c081e133fd Mon Sep 17 00:00:00 2001 From: Stanislav Motylkov Date: Sat, 23 Nov 2024 23:12:02 +0100 Subject: [PATCH] =?UTF-8?q?[REACTOS]=20Temporarily=20revert=200ca4e6dcfaf,?= =?UTF-8?q?=20as=20requested=20by=20Herm=C3=A8s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The setup mistakes the unpartitioned disk as GPT. This reverts commit 0ca4e6dcfaf93165300cc1866eeae50d221ab403. --- base/setup/lib/utils/partlist.c | 80 ++++++++++++++++++--------------- base/setup/lib/utils/partlist.h | 10 +++-- base/setup/reactos/drivepage.c | 4 +- base/setup/usetup/usetup.c | 6 +-- 4 files changed, 56 insertions(+), 44 deletions(-) diff --git a/base/setup/lib/utils/partlist.c b/base/setup/lib/utils/partlist.c index 6793ec855a9..c045518cbfe 100644 --- a/base/setup/lib/utils/partlist.c +++ b/base/setup/lib/utils/partlist.c @@ -2818,48 +2818,41 @@ GetAdjUnpartitionedEntry( return NULL; } -static ERROR_NUMBER -MBRPartitionCreateChecks( - _In_ PPARTENTRY PartEntry, - _In_opt_ ULONGLONG SizeBytes, - _In_opt_ ULONG_PTR PartitionInfo) +ERROR_NUMBER +PartitionCreationChecks( + _In_ PPARTENTRY PartEntry) { PDISKENTRY DiskEntry = PartEntry->DiskEntry; - BOOLEAN isContainer = IsContainerPartition((UCHAR)PartitionInfo); - ASSERT(DiskEntry->DiskStyle == PARTITION_STYLE_MBR); - ASSERT(!PartEntry->IsPartitioned); - - if (isContainer) + if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) { - /* Cannot create an extended partition within logical partition space */ - if (PartEntry->LogicalPartition) - return ERROR_ONLY_ONE_EXTENDED; - - /* Fail if there is another extended partition in the list */ - if (DiskEntry->ExtendedPartition) - return ERROR_ONLY_ONE_EXTENDED; + DPRINT1("GPT-partitioned disk detected, not currently supported by SETUP!\n"); + return ERROR_WARN_PARTITION; } + /* Fail if the partition is already in use */ + if (PartEntry->IsPartitioned) + return ERROR_NEW_PARTITION; + /* - * Primary or Extended partitions + * For primary partitions */ - if (!PartEntry->LogicalPartition || isContainer) + if (!PartEntry->LogicalPartition) { /* Only one primary partition is allowed on super-floppy */ if (IsSuperFloppy(DiskEntry)) return ERROR_PARTITION_TABLE_FULL; - /* Fail if there are too many primary partitions */ + /* Fail if there are already 4 primary partitions in the list */ if (GetPrimaryPartitionCount(DiskEntry) >= 4) return ERROR_PARTITION_TABLE_FULL; } /* - * Logical partitions + * For logical partitions */ else { - // TODO: Check that we are inside an extended partition! + // TODO: Check that we are inside an extended partition!! // Then the following check will be useless. /* Only one (primary) partition is allowed on super-floppy */ @@ -2871,24 +2864,38 @@ MBRPartitionCreateChecks( } ERROR_NUMBER -PartitionCreateChecks( - _In_ PPARTENTRY PartEntry, - _In_opt_ ULONGLONG SizeBytes, - _In_opt_ ULONG_PTR PartitionInfo) +ExtendedPartitionCreationChecks( + _In_ PPARTENTRY PartEntry) { PDISKENTRY DiskEntry = PartEntry->DiskEntry; + if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) + { + DPRINT1("GPT-partitioned disk detected, not currently supported by SETUP!\n"); + return ERROR_WARN_PARTITION; + } + /* Fail if the partition is already in use */ if (PartEntry->IsPartitioned) return ERROR_NEW_PARTITION; - if (DiskEntry->DiskStyle == PARTITION_STYLE_MBR) - return MBRPartitionCreateChecks(PartEntry, SizeBytes, PartitionInfo); - else // if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) - { - DPRINT1("GPT-partitioned disk detected, not currently supported by SETUP!\n"); - return ERROR_WARN_PARTITION; - } + /* Cannot create an extended partition within logical partition space */ + if (PartEntry->LogicalPartition) + return ERROR_ONLY_ONE_EXTENDED; + + /* Only one primary partition is allowed on super-floppy */ + if (IsSuperFloppy(DiskEntry)) + return ERROR_PARTITION_TABLE_FULL; + + /* Fail if there are already 4 primary partitions in the list */ + if (GetPrimaryPartitionCount(DiskEntry) >= 4) + return ERROR_PARTITION_TABLE_FULL; + + /* Fail if there is another extended partition in the list */ + if (DiskEntry->ExtendedPartition) + return ERROR_ONLY_ONE_EXTENDED; + + return ERROR_SUCCESS; } // TODO: Improve upon the PartitionInfo parameter later @@ -2919,10 +2926,13 @@ CreatePartition( return FALSE; } - Error = PartitionCreateChecks(PartEntry, SizeBytes, PartitionInfo); + if (isContainer) + Error = ExtendedPartitionCreationChecks(PartEntry); + else + Error = PartitionCreationChecks(PartEntry); if (Error != NOT_AN_ERROR) { - DPRINT1("PartitionCreateChecks(%s) failed with error %lu\n", mainType, Error); + DPRINT1("PartitionCreationChecks(%s) failed with error %lu\n", mainType, Error); return FALSE; } diff --git a/base/setup/lib/utils/partlist.h b/base/setup/lib/utils/partlist.h index 71b9eb99181..fb20f1500c0 100644 --- a/base/setup/lib/utils/partlist.h +++ b/base/setup/lib/utils/partlist.h @@ -338,10 +338,12 @@ GetAdjUnpartitionedEntry( _In_ BOOLEAN Direction); ERROR_NUMBER -PartitionCreateChecks( - _In_ PPARTENTRY PartEntry, - _In_opt_ ULONGLONG SizeBytes, - _In_opt_ ULONG_PTR PartitionInfo); +PartitionCreationChecks( + _In_ PPARTENTRY PartEntry); + +ERROR_NUMBER +ExtendedPartitionCreationChecks( + _In_ PPARTENTRY PartEntry); BOOLEAN CreatePartition( diff --git a/base/setup/reactos/drivepage.c b/base/setup/reactos/drivepage.c index dc4fc64cfb5..5afdb57b084 100644 --- a/base/setup/reactos/drivepage.c +++ b/base/setup/reactos/drivepage.c @@ -1975,7 +1975,7 @@ DriveDlgProc( // TODO: In the future: first test needs to be augmented with: // (... && PartEntry->Volume->IsSimpleVolume) if ((PartEntry->IsPartitioned && PartEntry->Volume) || - (!PartEntry->IsPartitioned && (PartitionCreateChecks(PartEntry, 0ULL, 0) == NOT_AN_ERROR))) + (!PartEntry->IsPartitioned && (PartitionCreationChecks(PartEntry) == NOT_AN_ERROR))) { // ASSERT(PartEntry != PartEntry->DiskEntry->ExtendedPartition); ASSERT(!IsContainerPartition(PartEntry->PartitionType)); @@ -2090,7 +2090,7 @@ DisableWizNext: { ULONG Error; - Error = PartitionCreateChecks(PartEntry, 0ULL, 0); + Error = PartitionCreationChecks(PartEntry); if (Error != NOT_AN_ERROR) { // MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY); diff --git a/base/setup/usetup/usetup.c b/base/setup/usetup/usetup.c index 10d133eb560..d5d569ede42 100644 --- a/base/setup/usetup/usetup.c +++ b/base/setup/usetup/usetup.c @@ -1711,7 +1711,7 @@ SelectPartitionPage(PINPUT_RECORD Ir) { ASSERT(CurrentPartition); - Error = PartitionCreateChecks(CurrentPartition, 0ULL, 0); + Error = PartitionCreationChecks(CurrentPartition); if (Error != NOT_AN_ERROR) { MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY); @@ -1729,7 +1729,7 @@ SelectPartitionPage(PINPUT_RECORD Ir) if (CurrentPartition->LogicalPartition) continue; - Error = PartitionCreateChecks(CurrentPartition, 0ULL, PARTITION_EXTENDED); + Error = ExtendedPartitionCreationChecks(CurrentPartition); if (Error != NOT_AN_ERROR) { MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY); @@ -1789,7 +1789,7 @@ CreateInstallPartition: /* Create the partition if the selected region is empty */ if (!CurrentPartition->IsPartitioned) { - Error = PartitionCreateChecks(CurrentPartition, 0ULL, 0); + Error = PartitionCreationChecks(CurrentPartition); if (Error != NOT_AN_ERROR) { MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);