[Unused ReactOS setup]

- Move duplicate code from LoadSetupData to a separate function
- Fix a bug on line 1054 of the original file: SetupData.LangCount should be SetupData.KbLayoutCount (copy-paste mistake). This would have probably gone unnoticed if SetupData.LangCount > SetupData.KbLayoutCount due to other end of section checking.
- Based on a patch from bug 4933.

svn path=/trunk/; revision=44116
This commit is contained in:
Aleksey Bragin
2009-11-12 12:35:01 +00:00
parent c02b96254e
commit ba319b373f
+49 -99
View File
@@ -103,6 +103,8 @@ TCHAR abort_msg[512], abort_title[64];
HINSTANCE hInstance;
BOOL isUnattend;
LONG LoadGenentry(HINF hinf,PCTSTR name,PGENENTRY gen,PINFCONTEXT context);
/* FUNCTIONS ****************************************************************/
static VOID
@@ -995,13 +997,12 @@ void LoadSetupData()
if (hTxtsetupSif != INVALID_HANDLE_VALUE)
{
// get language list
Count = SetupGetLineCount(hTxtsetupSif, _T("Language"));
if (Count > 0)
SetupData.LangCount = SetupGetLineCount(hTxtsetupSif, _T("Language"));
if (SetupData.LangCount > 0)
{
SetupData.pLanguages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LANG) * Count);
SetupData.pLanguages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LANG) * SetupData.LangCount);
if (SetupData.pLanguages != NULL)
{
SetupData.LangCount = Count;
Count = 0;
if (SetupFindFirstLine(hTxtsetupSif, _T("Language"), NULL, &InfContext))
{
@@ -1020,19 +1021,18 @@ void LoadSetupData()
&LineLength);
++Count;
}
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount);
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount);
}
}
}
// get keyboard layout list
Count = SetupGetLineCount(hTxtsetupSif, _T("KeyboardLayout"));
if (Count > 0)
SetupData.KbLayoutCount = SetupGetLineCount(hTxtsetupSif, _T("KeyboardLayout"));
if (SetupData.KbLayoutCount > 0)
{
SetupData.pKbLayouts = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KBLAYOUT) * Count);
SetupData.pKbLayouts = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KBLAYOUT) * SetupData.KbLayoutCount);
if (SetupData.pKbLayouts != NULL)
{
SetupData.KbLayoutCount = Count;
Count = 0;
if (SetupFindFirstLine(hTxtsetupSif, _T("KeyboardLayout"), NULL, &InfContext))
{
@@ -1051,7 +1051,7 @@ void LoadSetupData()
&LineLength);
++Count;
}
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount);
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.KbLayoutCount);
}
}
}
@@ -1084,99 +1084,13 @@ void LoadSetupData()
}
// get computers list
Count = SetupGetLineCount(hTxtsetupSif, _T("Computer"));
if (Count > 0)
{
SetupData.pComputers = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GENENTRY) * Count);
if (SetupData.pComputers != NULL)
{
SetupData.CompCount = Count;
Count = 0;
if (SetupFindFirstLine(hTxtsetupSif, _T("Computer"), NULL, &InfContext))
{
do
{
SetupGetStringField(&InfContext,
0,
SetupData.pComputers[Count].Id,
sizeof(SetupData.pComputers[Count].Id) / sizeof(TCHAR),
&LineLength);
SetupGetStringField(&InfContext,
1,
SetupData.pComputers[Count].Value,
sizeof(SetupData.pComputers[Count].Value) / sizeof(TCHAR),
&LineLength);
++Count;
}
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.CompCount);
}
}
}
SetupData.CompCount = LoadGenentry(hTxtsetupSif,_T("Computer"),SetupData.pComputers,&InfContext);
// get display list
Count = SetupGetLineCount(hTxtsetupSif, _T("Display"));
if (Count > 0)
{
SetupData.pDisplays = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GENENTRY) * Count);
if (SetupData.pDisplays != NULL)
{
SetupData.DispCount = Count;
Count = 0;
if (SetupFindFirstLine(hTxtsetupSif, _T("Display"), NULL, &InfContext))
{
do
{
SetupGetStringField(&InfContext,
0,
SetupData.pDisplays[Count].Id,
sizeof(SetupData.pDisplays[Count].Id) / sizeof(TCHAR),
&LineLength);
SetupGetStringField(&InfContext,
1,
SetupData.pDisplays[Count].Value,
sizeof(SetupData.pDisplays[Count].Value) / sizeof(TCHAR),
&LineLength);
++Count;
}
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.DispCount);
}
}
}
SetupData.DispCount = LoadGenentry(hTxtsetupSif,_T("Display"),SetupData.pDisplays,&InfContext);
// get keyboard list
Count = SetupGetLineCount(hTxtsetupSif, _T("Keyboard"));
if (Count > 0)
{
SetupData.pKeyboards = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GENENTRY) * Count);
if (SetupData.pKeyboards != NULL)
{
SetupData.KeybCount = Count;
Count = 0;
if (SetupFindFirstLine(hTxtsetupSif, _T("Keyboard"), NULL, &InfContext))
{
do
{
SetupGetStringField(&InfContext,
0,
SetupData.pKeyboards[Count].Id,
sizeof(SetupData.pKeyboards[Count].Id) / sizeof(TCHAR),
&LineLength);
SetupGetStringField(&InfContext,
1,
SetupData.pKeyboards[Count].Value,
sizeof(SetupData.pKeyboards[Count].Value) / sizeof(TCHAR),
&LineLength);
++Count;
}
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.KeybCount);
}
}
}
SetupData.KeybCount = LoadGenentry(hTxtsetupSif, _T("Keyboard"),SetupData.pKeyboards,&InfContext);
// get install directory
if (SetupFindFirstLine(hTxtsetupSif, _T("SetupData"), _T("DefaultPath"), &InfContext))
@@ -1191,6 +1105,42 @@ void LoadSetupData()
}
}
LONG LoadGenentry(HINF hinf,PCTSTR name,PGENENTRY gen,PINFCONTEXT context)
{
LONG TotalCount;
TotalCount = SetupGetLineCount(hinf, name);
if (TotalCount > 0)
{
gen = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GENENTRY) * TotalCount);
if (gen != NULL)
{
if (SetupFindFirstLine(hinf, name, NULL, context))
{
LONG Count = 0;
do
{
SetupGetStringField(context,
0,
gen[Count].Id,
sizeof(gen[Count].Id) / sizeof(TCHAR),
NULL);
SetupGetStringField(context,
1,
gen[Count].Value,
sizeof(gen[Count].Value) / sizeof(TCHAR),
NULL);
Count++;
}
while (SetupFindNextLine(context, context) && Count < TotalCount);
}
}
}
return TotalCount;
}
BOOL isUnattendSetup()
{
WCHAR szPath[MAX_PATH];