[SETUP] Add support for selecting FS type in unattended setups
authorPierre Schweitzer <pierre@reactos.org>
Fri, 28 Dec 2018 19:34:48 +0000 (20:34 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Fri, 28 Dec 2018 19:36:47 +0000 (20:36 +0100)
By default, we still fallback to FAT if nothing asked, or if there
is an invalid input.
0 is FAT, 1 is BtrFS. This can be grown as soon as we add more IFS.

base/setup/lib/setuplib.c
base/setup/lib/setuplib.h
base/setup/usetup/usetup.c
boot/bootdata/bootcdregtest/unattend.inf

index 1bbdaa8..2b52c46 100644 (file)
@@ -196,6 +196,16 @@ CheckUnattendedSetup(
        }
     }
 
        }
     }
 
+    /* Search for FsType in the 'Unattend' section */
+    pSetupData->FsType = 0;
+    if (SpInfFindFirstLine(UnattendInf, L"Unattend", L"FsType", &Context))
+    {
+        if (SpInfGetIntField(&Context, 1, &IntValue))
+        {
+            pSetupData->FsType = IntValue;
+        }
+    }
+
 Quit:
     SpInfCloseInfFile(UnattendInf);
 }
 Quit:
     SpInfCloseInfFile(UnattendInf);
 }
index 4bd5981..658054f 100644 (file)
@@ -110,6 +110,7 @@ typedef struct _USETUP_DATA
     LONG MBRInstallType;
     LONG FormatPartition;
     LONG AutoPartition;
     LONG MBRInstallType;
     LONG FormatPartition;
     LONG AutoPartition;
+    LONG FsType;
 
 /* Settings lists *****/
     PGENERIC_LIST ComputerList;
 
 /* Settings lists *****/
     PGENERIC_LIST ComputerList;
index deb918e..6fd68b7 100644 (file)
@@ -2859,8 +2859,31 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
 
     if (FileSystemList == NULL)
     {
 
     if (FileSystemList == NULL)
     {
-        /* Create the file system list, and by default select the "FAT" file system */
-        FileSystemList = CreateFileSystemList(6, 26, PartEntry->New, L"FAT");
+        PWSTR DefaultFs;
+
+        if (IsUnattendedSetup)
+        {
+            switch (USetupData.FsType)
+            {
+                /* 1 is for BtrFS */
+                case 1:
+                    DefaultFs = L"BTRFS";
+                    break;
+
+                /* If we don't understand input, default to FAT */
+                default:
+                    DefaultFs = L"FAT";
+                    break;
+            }
+        }
+        else
+        {
+            /* By default select the "FAT" file system */
+            DefaultFs = L"FAT";
+        }
+
+        /* Create the file system list */
+        FileSystemList = CreateFileSystemList(6, 26, PartEntry->New, DefaultFs);
         if (FileSystemList == NULL)
         {
             /* FIXME: show an error dialog */
         if (FileSystemList == NULL)
         {
             /* FIXME: show an error dialog */
@@ -2878,13 +2901,6 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
     {
         if (USetupData.FormatPartition)
         {
     {
         if (USetupData.FormatPartition)
         {
-            /*
-             * We use whatever currently selected file system we have
-             * (by default, this is "FAT", as per the initialization
-             * performed above). Note that it may be interesting to specify
-             * which file system to use in unattended installations, in the
-             * txtsetup.sif file.
-             */
             return FORMAT_PARTITION_PAGE;
         }
 
             return FORMAT_PARTITION_PAGE;
         }
 
index 08ce20d..e325e57 100644 (file)
@@ -38,6 +38,11 @@ FormatPartition=1
 ; 0 - disabled
 AutoPartition = 1
 
 ; 0 - disabled
 AutoPartition = 1
 
+; choose default file system type
+; 0 - FAT
+; 1 - BtrFS
+FsType = 0
+
 ; set this option to automatically
 ; specify language in 2nd mode setup
 ; see hivesys.inf for available languages
 ; set this option to automatically
 ; specify language in 2nd mode setup
 ; see hivesys.inf for available languages