/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS text-mode setup
- * FILE: subsys/system/usetup/fslist.c
+ * FILE: base/setup/usetup/fslist.c
* PURPOSE: Filesystem list functions
- * PROGRAMMER: Eric Kohl
- * Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
*/
#include "usetup.h"
/* FUNCTIONS ****************************************************************/
-VOID
-FS_AddProvider(
+static VOID
+AddProvider(
IN OUT PFILE_SYSTEM_LIST List,
- IN LPCWSTR FileSystem,
- IN FORMATEX FormatFunc,
- IN CHKDSKEX ChkdskFunc)
+ IN PCWSTR FileSystemName, // Redundant, I need to check whether this is reaaaaally needed....
+ IN PFILE_SYSTEM FileSystem)
{
PFILE_SYSTEM_ITEM Item;
- Item = (PFILE_SYSTEM_ITEM)RtlAllocateHeap(ProcessHeap, 0, sizeof(FILE_SYSTEM_ITEM));
+ Item = (PFILE_SYSTEM_ITEM)RtlAllocateHeap(ProcessHeap, 0, sizeof(*Item));
if (!Item)
return;
+ Item->FileSystemName = FileSystemName;
Item->FileSystem = FileSystem;
- Item->FormatFunc = FormatFunc;
- Item->ChkdskFunc = ChkdskFunc;
- Item->QuickFormat = FALSE;
+ Item->QuickFormat = TRUE;
InsertTailList(&List->ListHead, &Item->ListEntry);
- if (!FormatFunc)
+ if (!FileSystem)
return;
- Item = (PFILE_SYSTEM_ITEM)RtlAllocateHeap(ProcessHeap, 0, sizeof(FILE_SYSTEM_ITEM));
+ Item = (PFILE_SYSTEM_ITEM)RtlAllocateHeap(ProcessHeap, 0, sizeof(*Item));
if (!Item)
return;
+ Item->FileSystemName = FileSystemName;
Item->FileSystem = FileSystem;
- Item->FormatFunc = FormatFunc;
- Item->ChkdskFunc = ChkdskFunc;
- Item->QuickFormat = TRUE;
+ Item->QuickFormat = FALSE;
InsertTailList(&List->ListHead, &Item->ListEntry);
}
+static VOID
+InitializeFileSystemList(
+ IN PFILE_SYSTEM_LIST List)
+{
+ ULONG Count;
+ PFILE_SYSTEM FileSystems;
+
+ FileSystems = GetRegisteredFileSystems(&Count);
+ if (!FileSystems || Count == 0)
+ return;
+
+ while (Count--)
+ {
+ AddProvider(List, FileSystems->FileSystemName, FileSystems);
+ ++FileSystems;
+ }
+}
+
PFILE_SYSTEM_LIST
CreateFileSystemList(
IN SHORT Left,
IN SHORT Top,
IN BOOLEAN ForceFormat,
- IN LPCWSTR ForceFileSystem)
+ IN PCWSTR SelectFileSystem)
{
PFILE_SYSTEM_LIST List;
PFILE_SYSTEM_ITEM Item;
PLIST_ENTRY ListEntry;
- List = (PFILE_SYSTEM_LIST)RtlAllocateHeap(ProcessHeap, 0, sizeof(FILE_SYSTEM_LIST));
+ List = (PFILE_SYSTEM_LIST)RtlAllocateHeap(ProcessHeap, 0, sizeof(*List));
if (List == NULL)
return NULL;
List->Selected = NULL;
InitializeListHead(&List->ListHead);
- HOST_CreateFileSystemList(List);
-
+ InitializeFileSystemList(List);
if (!ForceFormat)
{
- /* Add 'Keep' provider */
- FS_AddProvider(List, NULL, NULL, NULL);
+ /* Add the 'Keep existing filesystem' dummy provider */
+ AddProvider(List, NULL, NULL);
}
- /* Search for ForceFileSystem in list */
+ /* Search for SelectFileSystem in list */
ListEntry = List->ListHead.Flink;
while (ListEntry != &List->ListHead)
{
Item = CONTAINING_RECORD(ListEntry, FILE_SYSTEM_ITEM, ListEntry);
- if (Item->FileSystem && wcscmp(ForceFileSystem, Item->FileSystem) == 0)
+ if (Item->FileSystemName && wcscmp(SelectFileSystem, Item->FileSystemName) == 0)
{
List->Selected = Item;
break;
DestroyFileSystemList(
IN PFILE_SYSTEM_LIST List)
{
- PLIST_ENTRY ListEntry = List->ListHead.Flink;
+ PLIST_ENTRY ListEntry;
PFILE_SYSTEM_ITEM Item;
- PLIST_ENTRY Next;
- while (ListEntry != &List->ListHead)
+ ListEntry = List->ListHead.Flink;
+ while (!IsListEmpty(&List->ListHead))
{
+ ListEntry = RemoveHeadList(&List->ListHead);
Item = CONTAINING_RECORD(ListEntry, FILE_SYSTEM_ITEM, ListEntry);
- Next = ListEntry->Flink;
-
RtlFreeHeap(ProcessHeap, 0, Item);
-
- ListEntry = Next;
}
+
RtlFreeHeap(ProcessHeap, 0, List);
}
COORD coPos;
DWORD Written;
ULONG Index = 0;
- CHAR Buffer[70];
+ CHAR Buffer[128];
ListEntry = List->ListHead.Flink;
while (ListEntry != &List->ListHead)
coPos,
&Written);
- if (Item->FileSystem)
+ if (Item->FileSystemName)
{
if (Item->QuickFormat)
- sprintf(Buffer, MUIGetString(STRING_FORMATDISK1), Item->FileSystem);
+ snprintf(Buffer, sizeof(Buffer), MUIGetString(STRING_FORMATDISK1), Item->FileSystemName);
else
- sprintf(Buffer, MUIGetString(STRING_FORMATDISK2), Item->FileSystem);
+ snprintf(Buffer, sizeof(Buffer), MUIGetString(STRING_FORMATDISK2), Item->FileSystemName);
}
else
- sprintf(Buffer, MUIGetString(STRING_KEEPFORMAT));
+ {
+ snprintf(Buffer, sizeof(Buffer), MUIGetString(STRING_KEEPFORMAT));
+ }
if (ListEntry == &List->Selected->ListEntry)
CONSOLE_SetInvertedTextXY(List->Left,