[SETUPLIB][USETUP] Remove the deprecated GenericListHasSingleEntry() function and use instead GetNumberOfListEntries().

- Few FIXMEs get fixed in the process.
- Add some diagnostic ASSERTs.
This commit is contained in:
Hermès Bélusca-Maïto 2018-01-28 23:14:16 +01:00
parent a635aa8475
commit a972948051
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
5 changed files with 24 additions and 39 deletions

View file

@ -761,10 +761,7 @@ ProcessComputerFiles(
Entry = GetCurrentListEntry(List);
if (Entry == NULL)
{
DPRINT("GetCurrentListEntry() failed\n");
return FALSE;
}
RtlStringCchPrintfW(SectionName, ARRAYSIZE(SectionName),
L"Files.%s", ((PGENENTRY)GetListEntryData(Entry))->Id);
@ -794,10 +791,7 @@ ProcessDisplayRegistry(
Entry = GetCurrentListEntry(List);
if (Entry == NULL)
{
DPRINT1("GetCurrentListEntry() failed\n");
return FALSE;
}
if (!SetupFindFirstLineW(InfFile, L"Display",
((PGENENTRY)GetListEntryData(Entry))->Id,

View file

@ -88,7 +88,7 @@ SetCurrentListEntry(
IN PGENERIC_LIST List,
IN PGENERIC_LIST_ENTRY Entry)
{
if (Entry->List != List)
if (!Entry || (Entry->List != List))
return;
List->CurrentEntry = Entry;
}
@ -143,16 +143,4 @@ GetNumberOfListEntries(
return List->NumOfEntries;
}
BOOLEAN
GenericListHasSingleEntry(
IN PGENERIC_LIST List)
{
/*
* If both list head pointers (which normally point to the first and last
* list member, respectively) point to the same entry then it means that
* there is just a single thing in there, otherwise... false!
*/
return (!IsListEmpty(&List->ListHead) && (List->ListHead.Flink == List->ListHead.Blink));
}
/* EOF */

View file

@ -66,8 +66,4 @@ ULONG
GetNumberOfListEntries(
IN PGENERIC_LIST List);
BOOLEAN
GenericListHasSingleEntry(
IN PGENERIC_LIST List);
/* EOF */

View file

@ -356,17 +356,20 @@ DrawGenericListCurrentItem(
IN SHORT Left,
IN SHORT Top)
{
//
// FIXME: That stuff crashes when the list is empty!!
//
CHAR CurrentItemText[256];
if (GetEntryDescriptionProc)
if (GetEntryDescriptionProc &&
GetNumberOfListEntries(List) > 0)
{
GetEntryDescriptionProc(GetCurrentListEntry(List),
CurrentItemText,
ARRAYSIZE(CurrentItemText));
CONSOLE_SetTextXY(Left, Top, CurrentItemText);
}
else
{
CONSOLE_SetTextXY(Left, Top, "");
}
}
VOID

View file

@ -508,9 +508,11 @@ LanguagePage(PINPUT_RECORD Ir)
SetConsoleCodePage();
UpdateKBLayout();
/* If there's just a single language in the list skip
* the language selection process altogether! */
if (GenericListHasSingleEntry(LanguageList))
/*
* If there is no language or just a single one in the list,
* skip the language selection process altogether.
*/
if (GetNumberOfListEntries(LanguageList) <= 1)
{
USetupData.LanguageId = (LANGID)(wcstol(SelectedLanguageId, NULL, 16) & 0xFFFF);
return WELCOME_PAGE;
@ -564,9 +566,8 @@ LanguagePage(PINPUT_RECORD Ir)
}
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
{
//
// FIXME: That stuff crashes when the list is empty!!
//
ASSERT(GetNumberOfListEntries(LanguageList) >= 1);
SelectedLanguageId =
((PGENENTRY)GetListEntryData(GetCurrentListEntry(LanguageList)))->Id;
@ -591,9 +592,8 @@ LanguagePage(PINPUT_RECORD Ir)
if (RefreshPage)
{
//
// FIXME: That stuff crashes when the list is empty!!
//
ASSERT(GetNumberOfListEntries(LanguageList) >= 1);
NewLanguageId =
((PGENENTRY)GetListEntryData(GetCurrentListEntry(LanguageList)))->Id;
@ -897,6 +897,11 @@ UpgradeRepairPage(PINPUT_RECORD Ir)
NtOsInstallsList = CreateNTOSInstallationsList(PartitionList);
if (!NtOsInstallsList)
DPRINT1("Failed to get a list of NTOS installations; continue installation...\n");
/*
* If there is no available installation (or just a single one??) that can
* be updated in the list, just continue with the regular installation.
*/
if (!NtOsInstallsList || GetNumberOfListEntries(NtOsInstallsList) == 0)
{
RepairUpdateFlag = FALSE;
@ -961,9 +966,8 @@ UpgradeRepairPage(PINPUT_RECORD Ir)
if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'U') /* U */
{
/* Retrieve the current installation */
//
// FIXME: That stuff crashes when the list is empty!!
//
ASSERT(GetNumberOfListEntries(NtOsInstallsList) >= 1);
CurrentInstallation =
(PNTOS_INSTALLATION)GetListEntryData(GetCurrentListEntry(NtOsInstallsList));