Skip to content

Commit bbdcc14

Browse files
committed
[REACTOS] Temporarily revert 0ca4e6d, as requested by Hermès
The setup mistakes the unpartitioned disk as GPT. This reverts commit 0ca4e6d.
1 parent 0ca4e6d commit bbdcc14

File tree

4 files changed

+56
-44
lines changed

4 files changed

+56
-44
lines changed

base/setup/lib/utils/partlist.c

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2818,48 +2818,41 @@ GetAdjUnpartitionedEntry(
28182818
return NULL;
28192819
}
28202820

2821-
static ERROR_NUMBER
2822-
MBRPartitionCreateChecks(
2823-
_In_ PPARTENTRY PartEntry,
2824-
_In_opt_ ULONGLONG SizeBytes,
2825-
_In_opt_ ULONG_PTR PartitionInfo)
2821+
ERROR_NUMBER
2822+
PartitionCreationChecks(
2823+
_In_ PPARTENTRY PartEntry)
28262824
{
28272825
PDISKENTRY DiskEntry = PartEntry->DiskEntry;
2828-
BOOLEAN isContainer = IsContainerPartition((UCHAR)PartitionInfo);
28292826

2830-
ASSERT(DiskEntry->DiskStyle == PARTITION_STYLE_MBR);
2831-
ASSERT(!PartEntry->IsPartitioned);
2832-
2833-
if (isContainer)
2827+
if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT)
28342828
{
2835-
/* Cannot create an extended partition within logical partition space */
2836-
if (PartEntry->LogicalPartition)
2837-
return ERROR_ONLY_ONE_EXTENDED;
2838-
2839-
/* Fail if there is another extended partition in the list */
2840-
if (DiskEntry->ExtendedPartition)
2841-
return ERROR_ONLY_ONE_EXTENDED;
2829+
DPRINT1("GPT-partitioned disk detected, not currently supported by SETUP!\n");
2830+
return ERROR_WARN_PARTITION;
28422831
}
28432832

2833+
/* Fail if the partition is already in use */
2834+
if (PartEntry->IsPartitioned)
2835+
return ERROR_NEW_PARTITION;
2836+
28442837
/*
2845-
* Primary or Extended partitions
2838+
* For primary partitions
28462839
*/
2847-
if (!PartEntry->LogicalPartition || isContainer)
2840+
if (!PartEntry->LogicalPartition)
28482841
{
28492842
/* Only one primary partition is allowed on super-floppy */
28502843
if (IsSuperFloppy(DiskEntry))
28512844
return ERROR_PARTITION_TABLE_FULL;
28522845

2853-
/* Fail if there are too many primary partitions */
2846+
/* Fail if there are already 4 primary partitions in the list */
28542847
if (GetPrimaryPartitionCount(DiskEntry) >= 4)
28552848
return ERROR_PARTITION_TABLE_FULL;
28562849
}
28572850
/*
2858-
* Logical partitions
2851+
* For logical partitions
28592852
*/
28602853
else
28612854
{
2862-
// TODO: Check that we are inside an extended partition!
2855+
// TODO: Check that we are inside an extended partition!!
28632856
// Then the following check will be useless.
28642857

28652858
/* Only one (primary) partition is allowed on super-floppy */
@@ -2871,24 +2864,38 @@ MBRPartitionCreateChecks(
28712864
}
28722865

28732866
ERROR_NUMBER
2874-
PartitionCreateChecks(
2875-
_In_ PPARTENTRY PartEntry,
2876-
_In_opt_ ULONGLONG SizeBytes,
2877-
_In_opt_ ULONG_PTR PartitionInfo)
2867+
ExtendedPartitionCreationChecks(
2868+
_In_ PPARTENTRY PartEntry)
28782869
{
28792870
PDISKENTRY DiskEntry = PartEntry->DiskEntry;
28802871

2881-
/* Fail if the partition is already in use */
2882-
if (PartEntry->IsPartitioned)
2883-
return ERROR_NEW_PARTITION;
2884-
2885-
if (DiskEntry->DiskStyle == PARTITION_STYLE_MBR)
2886-
return MBRPartitionCreateChecks(PartEntry, SizeBytes, PartitionInfo);
2887-
else // if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT)
2872+
if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT)
28882873
{
28892874
DPRINT1("GPT-partitioned disk detected, not currently supported by SETUP!\n");
28902875
return ERROR_WARN_PARTITION;
28912876
}
2877+
2878+
/* Fail if the partition is already in use */
2879+
if (PartEntry->IsPartitioned)
2880+
return ERROR_NEW_PARTITION;
2881+
2882+
/* Cannot create an extended partition within logical partition space */
2883+
if (PartEntry->LogicalPartition)
2884+
return ERROR_ONLY_ONE_EXTENDED;
2885+
2886+
/* Only one primary partition is allowed on super-floppy */
2887+
if (IsSuperFloppy(DiskEntry))
2888+
return ERROR_PARTITION_TABLE_FULL;
2889+
2890+
/* Fail if there are already 4 primary partitions in the list */
2891+
if (GetPrimaryPartitionCount(DiskEntry) >= 4)
2892+
return ERROR_PARTITION_TABLE_FULL;
2893+
2894+
/* Fail if there is another extended partition in the list */
2895+
if (DiskEntry->ExtendedPartition)
2896+
return ERROR_ONLY_ONE_EXTENDED;
2897+
2898+
return ERROR_SUCCESS;
28922899
}
28932900

28942901
// TODO: Improve upon the PartitionInfo parameter later
@@ -2919,10 +2926,13 @@ CreatePartition(
29192926
return FALSE;
29202927
}
29212928

2922-
Error = PartitionCreateChecks(PartEntry, SizeBytes, PartitionInfo);
2929+
if (isContainer)
2930+
Error = ExtendedPartitionCreationChecks(PartEntry);
2931+
else
2932+
Error = PartitionCreationChecks(PartEntry);
29232933
if (Error != NOT_AN_ERROR)
29242934
{
2925-
DPRINT1("PartitionCreateChecks(%s) failed with error %lu\n", mainType, Error);
2935+
DPRINT1("PartitionCreationChecks(%s) failed with error %lu\n", mainType, Error);
29262936
return FALSE;
29272937
}
29282938

base/setup/lib/utils/partlist.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,12 @@ GetAdjUnpartitionedEntry(
338338
_In_ BOOLEAN Direction);
339339

340340
ERROR_NUMBER
341-
PartitionCreateChecks(
342-
_In_ PPARTENTRY PartEntry,
343-
_In_opt_ ULONGLONG SizeBytes,
344-
_In_opt_ ULONG_PTR PartitionInfo);
341+
PartitionCreationChecks(
342+
_In_ PPARTENTRY PartEntry);
343+
344+
ERROR_NUMBER
345+
ExtendedPartitionCreationChecks(
346+
_In_ PPARTENTRY PartEntry);
345347

346348
BOOLEAN
347349
CreatePartition(

base/setup/reactos/drivepage.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1975,7 +1975,7 @@ DriveDlgProc(
19751975
// TODO: In the future: first test needs to be augmented with:
19761976
// (... && PartEntry->Volume->IsSimpleVolume)
19771977
if ((PartEntry->IsPartitioned && PartEntry->Volume) ||
1978-
(!PartEntry->IsPartitioned && (PartitionCreateChecks(PartEntry, 0ULL, 0) == NOT_AN_ERROR)))
1978+
(!PartEntry->IsPartitioned && (PartitionCreationChecks(PartEntry) == NOT_AN_ERROR)))
19791979
{
19801980
// ASSERT(PartEntry != PartEntry->DiskEntry->ExtendedPartition);
19811981
ASSERT(!IsContainerPartition(PartEntry->PartitionType));
@@ -2090,7 +2090,7 @@ DriveDlgProc(
20902090
{
20912091
ULONG Error;
20922092

2093-
Error = PartitionCreateChecks(PartEntry, 0ULL, 0);
2093+
Error = PartitionCreationChecks(PartEntry);
20942094
if (Error != NOT_AN_ERROR)
20952095
{
20962096
// MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);

base/setup/usetup/usetup.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1711,7 +1711,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
17111711
{
17121712
ASSERT(CurrentPartition);
17131713

1714-
Error = PartitionCreateChecks(CurrentPartition, 0ULL, 0);
1714+
Error = PartitionCreationChecks(CurrentPartition);
17151715
if (Error != NOT_AN_ERROR)
17161716
{
17171717
MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
@@ -1729,7 +1729,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
17291729
if (CurrentPartition->LogicalPartition)
17301730
continue;
17311731

1732-
Error = PartitionCreateChecks(CurrentPartition, 0ULL, PARTITION_EXTENDED);
1732+
Error = ExtendedPartitionCreationChecks(CurrentPartition);
17331733
if (Error != NOT_AN_ERROR)
17341734
{
17351735
MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
@@ -1789,7 +1789,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
17891789
/* Create the partition if the selected region is empty */
17901790
if (!CurrentPartition->IsPartitioned)
17911791
{
1792-
Error = PartitionCreateChecks(CurrentPartition, 0ULL, 0);
1792+
Error = PartitionCreationChecks(CurrentPartition);
17931793
if (Error != NOT_AN_ERROR)
17941794
{
17951795
MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);

0 commit comments

Comments
 (0)