[SETUPLIB] Cleanup some partition getters and remove GetDiskOrPartition.

- osdetect.c: Replace usage of GetDiskOrPartition by SelectPartition.
This commit is contained in:
Hermès Bélusca-Maïto 2024-06-20 22:36:16 +02:00
parent 63935f857f
commit a2777cd828
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
3 changed files with 48 additions and 115 deletions

View file

@ -78,7 +78,6 @@ EnumerateInstallations(
ULONG DiskNumber = 0, PartitionNumber = 0; ULONG DiskNumber = 0, PartitionNumber = 0;
PCWSTR PathComponent = NULL; PCWSTR PathComponent = NULL;
PDISKENTRY DiskEntry = NULL;
PPARTENTRY PartEntry = NULL; PPARTENTRY PartEntry = NULL;
UNICODE_STRING SystemRootPath; UNICODE_STRING SystemRootPath;
@ -184,10 +183,11 @@ EnumerateInstallations(
DPRINT("SystemRootPath = '%wZ' points to disk #%d, partition #%d, path '%S'\n", DPRINT("SystemRootPath = '%wZ' points to disk #%d, partition #%d, path '%S'\n",
&SystemRootPath, DiskNumber, PartitionNumber, PathComponent); &SystemRootPath, DiskNumber, PartitionNumber, PathComponent);
/* Retrieve the corresponding disk and partition */ /* Retrieve the corresponding partition */
if (!GetDiskOrPartition(Data->PartList, DiskNumber, PartitionNumber, &DiskEntry, &PartEntry)) PartEntry = SelectPartition(Data->PartList, DiskNumber, PartitionNumber);
if (!PartEntry)
{ {
DPRINT1("GetDiskOrPartition(disk #%d, partition #%d) failed\n", DPRINT1("SelectPartition(disk #%d, partition #%d) failed\n",
DiskNumber, PartitionNumber); DiskNumber, PartitionNumber);
} }
} }

View file

@ -2062,8 +2062,8 @@ DestroyPartitionList(
PDISKENTRY PDISKENTRY
GetDiskByBiosNumber( GetDiskByBiosNumber(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG HwDiskNumber) _In_ ULONG HwDiskNumber)
{ {
PDISKENTRY DiskEntry; PDISKENTRY DiskEntry;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
@ -2076,10 +2076,7 @@ GetDiskByBiosNumber(
DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry); DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
if (DiskEntry->HwDiskNumber == HwDiskNumber) if (DiskEntry->HwDiskNumber == HwDiskNumber)
{ return DiskEntry; /* Disk found, return it */
/* Disk found */
return DiskEntry;
}
} }
/* Disk not found, stop there */ /* Disk not found, stop there */
@ -2088,8 +2085,8 @@ GetDiskByBiosNumber(
PDISKENTRY PDISKENTRY
GetDiskByNumber( GetDiskByNumber(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG DiskNumber) _In_ ULONG DiskNumber)
{ {
PDISKENTRY DiskEntry; PDISKENTRY DiskEntry;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
@ -2102,10 +2099,7 @@ GetDiskByNumber(
DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry); DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
if (DiskEntry->DiskNumber == DiskNumber) if (DiskEntry->DiskNumber == DiskNumber)
{ return DiskEntry; /* Disk found, return it */
/* Disk found */
return DiskEntry;
}
} }
/* Disk not found, stop there */ /* Disk not found, stop there */
@ -2114,10 +2108,10 @@ GetDiskByNumber(
PDISKENTRY PDISKENTRY
GetDiskBySCSI( GetDiskBySCSI(
IN PPARTLIST List, _In_ PPARTLIST List,
IN USHORT Port, _In_ USHORT Port,
IN USHORT Bus, _In_ USHORT Bus,
IN USHORT Id) _In_ USHORT Id)
{ {
PDISKENTRY DiskEntry; PDISKENTRY DiskEntry;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
@ -2133,7 +2127,7 @@ GetDiskBySCSI(
DiskEntry->Bus == Bus && DiskEntry->Bus == Bus &&
DiskEntry->Id == Id) DiskEntry->Id == Id)
{ {
/* Disk found */ /* Disk found, return it */
return DiskEntry; return DiskEntry;
} }
} }
@ -2144,8 +2138,8 @@ GetDiskBySCSI(
PDISKENTRY PDISKENTRY
GetDiskBySignature( GetDiskBySignature(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG Signature) _In_ ULONG Signature)
{ {
PDISKENTRY DiskEntry; PDISKENTRY DiskEntry;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
@ -2158,10 +2152,7 @@ GetDiskBySignature(
DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry); DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
if (DiskEntry->LayoutBuffer->Signature == Signature) if (DiskEntry->LayoutBuffer->Signature == Signature)
{ return DiskEntry; /* Disk found, return it */
/* Disk found */
return DiskEntry;
}
} }
/* Disk not found, stop there */ /* Disk not found, stop there */
@ -2170,20 +2161,13 @@ GetDiskBySignature(
PPARTENTRY PPARTENTRY
GetPartition( GetPartition(
// IN PPARTLIST List, _In_ PDISKENTRY DiskEntry,
IN PDISKENTRY DiskEntry, _In_ ULONG PartitionNumber)
IN ULONG PartitionNumber)
{ {
PPARTENTRY PartEntry; PPARTENTRY PartEntry;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) /* Loop over the primary partitions first... */
{
DPRINT("GPT-partitioned disk detected, not currently supported by SETUP!\n");
return NULL;
}
/* Disk found, loop over the primary partitions first... */
for (Entry = DiskEntry->PrimaryPartListHead.Flink; for (Entry = DiskEntry->PrimaryPartListHead.Flink;
Entry != &DiskEntry->PrimaryPartListHead; Entry != &DiskEntry->PrimaryPartListHead;
Entry = Entry->Flink) Entry = Entry->Flink)
@ -2191,12 +2175,12 @@ GetPartition(
PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry);
if (PartEntry->PartitionNumber == PartitionNumber) if (PartEntry->PartitionNumber == PartitionNumber)
{ return PartEntry; /* Partition found, return it */
/* Partition found */
return PartEntry;
}
} }
if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT)
return NULL;
/* ... then over the logical partitions if needed */ /* ... then over the logical partitions if needed */
for (Entry = DiskEntry->LogicalPartListHead.Flink; for (Entry = DiskEntry->LogicalPartListHead.Flink;
Entry != &DiskEntry->LogicalPartListHead; Entry != &DiskEntry->LogicalPartListHead;
@ -2205,75 +2189,33 @@ GetPartition(
PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry);
if (PartEntry->PartitionNumber == PartitionNumber) if (PartEntry->PartitionNumber == PartitionNumber)
{ return PartEntry; /* Partition found, return it */
/* Partition found */
return PartEntry;
}
} }
/* The partition was not found on the disk, stop there */ /* The partition was not found on the disk, stop there */
return NULL; return NULL;
} }
BOOLEAN
GetDiskOrPartition(
IN PPARTLIST List,
IN ULONG DiskNumber,
IN ULONG PartitionNumber OPTIONAL,
OUT PDISKENTRY* pDiskEntry,
OUT PPARTENTRY* pPartEntry OPTIONAL)
{
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry = NULL;
/* Find the disk */
DiskEntry = GetDiskByNumber(List, DiskNumber);
if (!DiskEntry)
return FALSE;
/* If we have a partition (PartitionNumber != 0), find it */
if (PartitionNumber != 0)
{
if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT)
{
DPRINT("GPT-partitioned disk detected, not currently supported by SETUP!\n");
return FALSE;
}
PartEntry = GetPartition(/*List,*/ DiskEntry, PartitionNumber);
if (!PartEntry)
return FALSE;
ASSERT(PartEntry->DiskEntry == DiskEntry);
}
/* Return the disk (and optionally the partition) */
*pDiskEntry = DiskEntry;
if (pPartEntry) *pPartEntry = PartEntry;
return TRUE;
}
//
// NOTE: Was introduced broken in r6258 by Casper
//
PPARTENTRY PPARTENTRY
SelectPartition( SelectPartition(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG DiskNumber, _In_ ULONG DiskNumber,
IN ULONG PartitionNumber) _In_ ULONG PartitionNumber)
{ {
PDISKENTRY DiskEntry; PDISKENTRY DiskEntry;
PPARTENTRY PartEntry; PPARTENTRY PartEntry;
/* Find the disk */
DiskEntry = GetDiskByNumber(List, DiskNumber); DiskEntry = GetDiskByNumber(List, DiskNumber);
if (!DiskEntry) if (!DiskEntry)
return NULL; return NULL;
ASSERT(DiskEntry->DiskNumber == DiskNumber);
PartEntry = GetPartition(/*List,*/ DiskEntry, PartitionNumber); /* Find the partition */
PartEntry = GetPartition(DiskEntry, PartitionNumber);
if (!PartEntry) if (!PartEntry)
return NULL; return NULL;
ASSERT(PartEntry->DiskEntry == DiskEntry); ASSERT(PartEntry->DiskEntry == DiskEntry);
ASSERT(DiskEntry->DiskNumber == DiskNumber);
ASSERT(PartEntry->PartitionNumber == PartitionNumber); ASSERT(PartEntry->PartitionNumber == PartitionNumber);
return PartEntry; return PartEntry;

View file

@ -251,45 +251,36 @@ DestroyPartitionList(
PDISKENTRY PDISKENTRY
GetDiskByBiosNumber( GetDiskByBiosNumber(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG HwDiskNumber); _In_ ULONG HwDiskNumber);
PDISKENTRY PDISKENTRY
GetDiskByNumber( GetDiskByNumber(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG DiskNumber); _In_ ULONG DiskNumber);
PDISKENTRY PDISKENTRY
GetDiskBySCSI( GetDiskBySCSI(
IN PPARTLIST List, _In_ PPARTLIST List,
IN USHORT Port, _In_ USHORT Port,
IN USHORT Bus, _In_ USHORT Bus,
IN USHORT Id); _In_ USHORT Id);
PDISKENTRY PDISKENTRY
GetDiskBySignature( GetDiskBySignature(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG Signature); _In_ ULONG Signature);
PPARTENTRY PPARTENTRY
GetPartition( GetPartition(
// IN PPARTLIST List, _In_ PDISKENTRY DiskEntry,
IN PDISKENTRY DiskEntry, _In_ ULONG PartitionNumber);
IN ULONG PartitionNumber);
BOOLEAN
GetDiskOrPartition(
IN PPARTLIST List,
IN ULONG DiskNumber,
IN ULONG PartitionNumber OPTIONAL,
OUT PDISKENTRY* pDiskEntry,
OUT PPARTENTRY* pPartEntry OPTIONAL);
PPARTENTRY PPARTENTRY
SelectPartition( SelectPartition(
IN PPARTLIST List, _In_ PPARTLIST List,
IN ULONG DiskNumber, _In_ ULONG DiskNumber,
IN ULONG PartitionNumber); _In_ ULONG PartitionNumber);
PPARTENTRY PPARTENTRY
GetNextPartition( GetNextPartition(