[Unused ReactOS setup]
authorAleksey Bragin <aleksey@reactos.org>
Thu, 12 Nov 2009 12:35:01 +0000 (12:35 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Thu, 12 Nov 2009 12:35:01 +0000 (12:35 +0000)
- 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

reactos/base/setup/reactos/reactos.c

index 9704d27..7295920 100644 (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];