From 90d5c198509e251aa20ee88bc0c47fbfffc9b297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Mon, 4 Sep 2006 19:27:19 +0000 Subject: [PATCH] Remove Vfat(x)Initialize and Vfat(x)Cleanup which were empty Remove vfatlib dependancy of fmifs.dll (Providers like ufat.dll are loaded dynamically at startup) svn path=/trunk/; revision=23915 --- reactos/base/setup/usetup/format.c | 4 - reactos/baseaddress.rbuild | 1 + reactos/dll/win32/fmifs/fmifs.rbuild | 1 - reactos/dll/win32/fmifs/format.c | 13 +-- reactos/dll/win32/fmifs/init.c | 80 ++++++++++++++++++- reactos/dll/win32/fmifs/precomp.h | 39 ++++++++- reactos/include/reactos/libs/fslib/vfatlib.h | 10 +-- reactos/include/reactos/libs/fslib/vfatxlib.h | 12 +-- reactos/lib/fslib/vfatlib/vfatlib.c | 22 +---- reactos/lib/fslib/vfatxlib/vfatxlib.c | 24 +----- 10 files changed, 133 insertions(+), 73 deletions(-) diff --git a/reactos/base/setup/usetup/format.c b/reactos/base/setup/usetup/format.c index 690c3703271..9f665bc6b69 100644 --- a/reactos/base/setup/usetup/format.c +++ b/reactos/base/setup/usetup/format.c @@ -105,8 +105,6 @@ FormatPartition (PUNICODE_STRING DriveRoot) ProgressSetStepCount (ProgressBar, 100); - VfatInitialize (); - Status = VfatFormat (DriveRoot, 0, /* MediaFlag */ NULL, /* Label */ @@ -114,8 +112,6 @@ FormatPartition (PUNICODE_STRING DriveRoot) 0, /* ClusterSize */ (PFMIFSCALLBACK)FormatCallback); /* Callback */ - VfatCleanup (); - DestroyProgressBar (ProgressBar); ProgressBar = NULL; diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index a99f59730bc..8cb1ba9f109 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -67,6 +67,7 @@ + diff --git a/reactos/dll/win32/fmifs/fmifs.rbuild b/reactos/dll/win32/fmifs/fmifs.rbuild index 76a1aa77f1a..dee10fe3902 100644 --- a/reactos/dll/win32/fmifs/fmifs.rbuild +++ b/reactos/dll/win32/fmifs/fmifs.rbuild @@ -4,7 +4,6 @@ 0x0600 - vfatlib ntdll kernel32 chkdsk.c diff --git a/reactos/dll/win32/fmifs/format.c b/reactos/dll/win32/fmifs/format.c index 4df75f14bdf..bef9f0ab85d 100644 --- a/reactos/dll/win32/fmifs/format.c +++ b/reactos/dll/win32/fmifs/format.c @@ -5,6 +5,7 @@ * PURPOSE: Volume format * * PROGRAMMERS: Emanuele Aliberti + * Hervé Poussineau (hpoussin@reactos.org) */ #include "precomp.h" @@ -14,7 +15,7 @@ /* FMIFS.6 */ VOID NTAPI -Format(void) +Format(VOID) { } @@ -29,13 +30,15 @@ FormatEx( IN ULONG ClusterSize, IN PFMIFSCALLBACK Callback) { + PIFS_PROVIDER Provider; UNICODE_STRING usDriveRoot; UNICODE_STRING usLabel; BOOLEAN Argument = FALSE; WCHAR VolumeName[MAX_PATH]; CURDIR CurDir; - if (_wcsnicmp(Format, L"FAT", 3) != 0) + Provider = GetProvider(Format); + if (!Provider) { /* Unknown file system */ Callback( @@ -58,16 +61,14 @@ FormatEx( RtlInitUnicodeString(&usLabel, Label); - DPRINT1("FormatEx - FAT\n"); - VfatInitialize(); - VfatFormat( + DPRINT1("FormatEx - %S\n", Format); + Provider->FormatEx( &usDriveRoot, MediaFlag, &usLabel, QuickFormat, ClusterSize, Callback); - VfatCleanup(); RtlFreeUnicodeString(&usDriveRoot); } diff --git a/reactos/dll/win32/fmifs/init.c b/reactos/dll/win32/fmifs/init.c index c82149d98ec..459f60380d0 100644 --- a/reactos/dll/win32/fmifs/init.c +++ b/reactos/dll/win32/fmifs/init.c @@ -5,17 +5,93 @@ * PURPOSE: Initialisation * * PROGRAMMERS: Emanuele Aliberti + * Hervé Poussineau (hpoussin@reactos.org) */ #include "precomp.h" static BOOLEAN FmIfsInitialized = FALSE; +LIST_ENTRY ProviderListHead; -static BOOLEAN NTAPI +PIFS_PROVIDER +GetProvider( + IN PWCHAR FileSystem) +{ + PLIST_ENTRY ListEntry; + PIFS_PROVIDER Provider; + + ListEntry = ProviderListHead.Flink; + while (ListEntry != ProviderListHead.Flink) + { + Provider = CONTAINING_RECORD(ListEntry, IFS_PROVIDER, ListEntry); + if (wcscmp(Provider->Name, FileSystem) == 0) + return Provider; + ListEntry = ListEntry->Flink; + } + + /* Provider not found */ + return NULL; +} + +static BOOLEAN +AddProvider( + IN PWCHAR FileSystem, + IN PWCHAR DllFile) +{ + PIFS_PROVIDER Provider = NULL; + ULONG RequiredSize; + HMODULE hMod = NULL; + BOOLEAN ret = FALSE; + + hMod = LoadLibraryW(DllFile); + if (!hMod) + goto cleanup; + + RequiredSize = FIELD_OFFSET(IFS_PROVIDER, Name) + + wcslen(FileSystem) * sizeof(WCHAR) + sizeof(UNICODE_NULL); + Provider = (PIFS_PROVIDER)RtlAllocateHeap( + RtlGetProcessHeap(), + 0, + RequiredSize); + if (!Provider) + goto cleanup; + RtlZeroMemory(Provider, RequiredSize); + + /* Get function pointers */ + //Provider->Chkdsk = (CHKDSK)GetProcAddress(hMod, "Chkdsk"); + //Provider->ChkdskEx = (CHKDSKEX)GetProcAddress(hMod, "ChkdskEx"); + //Provider->Extend = (EXTEND)GetProcAddress(hMod, "Extend"); + //Provider->Format = (FORMAT)GetProcAddress(hMod, "Format"); + Provider->FormatEx = (FORMATEX)GetProcAddress(hMod, "FormatEx"); + //Provider->Recover = (RECOVER)GetProcAddress(hMod, "Recover"); + + wcscpy(Provider->Name, FileSystem); + + InsertTailList(&ProviderListHead, &Provider->ListEntry); + ret = TRUE; + +cleanup: + if (!ret) + { + if (hMod) + FreeLibrary(hMod); + if (Provider) + RtlFreeHeap(RtlGetProcessHeap(), 0, Provider); + } + return ret; +} + +static BOOLEAN InitializeFmIfsOnce(void) { + InitializeListHead(&ProviderListHead); + + /* Add default providers */ + AddProvider(L"FAT", L"ufat"); + AddProvider(L"FAT32", L"ufat"); + /* TODO: Check how many IFS are installed in the system */ - /* TOSO: and register a descriptor for each one */ + /* TODO: and register a descriptor for each one */ return TRUE; } diff --git a/reactos/dll/win32/fmifs/precomp.h b/reactos/dll/win32/fmifs/precomp.h index 13ae56aa4d7..a69c66c4c57 100644 --- a/reactos/dll/win32/fmifs/precomp.h +++ b/reactos/dll/win32/fmifs/precomp.h @@ -1,9 +1,11 @@ /* * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS System Libraries - * FILE: lib/fmifs/precomp.h - * PURPOSE: Win32 FMIFS API Libary Header - * PROGRAMMER: Alex Ionescu (alex@relsoft.net) + * PROJECT: File Management IFS Utility functions + * FILE: reactos/dll/win32/fmifs/precomp.h + * PURPOSE: Win32 FMIFS API Library Header + * + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * Hervé Poussineau (hpoussin@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -23,4 +25,33 @@ /* VFATLIB Public Header */ #include +typedef NTSTATUS (NTAPI *FORMATEX)( + IN PUNICODE_STRING DriveRoot, + IN FMIFS_MEDIA_FLAG MediaFlag, + IN PUNICODE_STRING Label, + IN BOOLEAN QuickFormat, + IN ULONG ClusterSize, + IN PFMIFSCALLBACK Callback); + +extern LIST_ENTRY ProviderListHead; + +typedef struct _IFS_PROVIDER +{ + LIST_ENTRY ListEntry; + + PVOID Chkdsk; + PVOID ChkdskEx; + PVOID Extend; + PVOID Format; + FORMATEX FormatEx; + PVOID Recover; + + WCHAR Name[1]; +} IFS_PROVIDER, *PIFS_PROVIDER; + +/* init.c */ +PIFS_PROVIDER +GetProvider( + IN PWCHAR FileSytem); + /* EOF */ diff --git a/reactos/include/reactos/libs/fslib/vfatlib.h b/reactos/include/reactos/libs/fslib/vfatlib.h index e0c0fa948d7..c54d9260994 100755 --- a/reactos/include/reactos/libs/fslib/vfatlib.h +++ b/reactos/include/reactos/libs/fslib/vfatlib.h @@ -9,15 +9,9 @@ #include -NTSTATUS -VfatInitialize (VOID); - -NTSTATUS -VfatCleanup (VOID); - -NTSTATUS +NTSTATUS NTAPI VfatFormat (PUNICODE_STRING DriveRoot, - ULONG MediaFlag, + FMIFS_MEDIA_FLAG MediaFlag, PUNICODE_STRING Label, BOOLEAN QuickFormat, ULONG ClusterSize, diff --git a/reactos/include/reactos/libs/fslib/vfatxlib.h b/reactos/include/reactos/libs/fslib/vfatxlib.h index 0d67efe2891..b44911168fb 100644 --- a/reactos/include/reactos/libs/fslib/vfatxlib.h +++ b/reactos/include/reactos/libs/fslib/vfatxlib.h @@ -9,16 +9,12 @@ #include -NTSTATUS -VfatxInitialize (VOID); - -NTSTATUS -VfatxCleanup (VOID); - -NTSTATUS +NTSTATUS NTAPI VfatxFormat (PUNICODE_STRING DriveRoot, - ULONG MediaFlag, + FMIFS_MEDIA_FLAG MediaFlag, + PUNICODE_STRING Label, BOOLEAN QuickFormat, + ULONG ClusterSize, PFMIFSCALLBACK Callback); #endif /*__VFATLIB_H */ diff --git a/reactos/lib/fslib/vfatlib/vfatlib.c b/reactos/lib/fslib/vfatlib/vfatlib.c index 32967beb4ad..386679689d7 100755 --- a/reactos/lib/fslib/vfatlib/vfatlib.c +++ b/reactos/lib/fslib/vfatlib/vfatlib.c @@ -12,18 +12,9 @@ #define NDEBUG #include -NTSTATUS -VfatInitialize(VOID) -{ - DPRINT("VfatInitialize()\n"); - - return STATUS_SUCCESS; -} - - -NTSTATUS +NTSTATUS NTAPI VfatFormat (PUNICODE_STRING DriveRoot, - ULONG MediaFlag, + FMIFS_MEDIA_FLAG MediaFlag, PUNICODE_STRING Label, BOOLEAN QuickFormat, ULONG ClusterSize, @@ -194,15 +185,6 @@ VfatFormat (PUNICODE_STRING DriveRoot, } -NTSTATUS -VfatCleanup(VOID) -{ - DPRINT("VfatCleanup()\n"); - - return STATUS_SUCCESS; -} - - VOID UpdateProgress (PFORMAT_CONTEXT Context, ULONG Increment) diff --git a/reactos/lib/fslib/vfatxlib/vfatxlib.c b/reactos/lib/fslib/vfatxlib/vfatxlib.c index 0fe20518bb0..6f18957b19e 100644 --- a/reactos/lib/fslib/vfatxlib/vfatxlib.c +++ b/reactos/lib/fslib/vfatxlib/vfatxlib.c @@ -12,19 +12,12 @@ #define NDEBUG #include -NTSTATUS -VfatxInitialize(VOID) -{ - DPRINT("VfatxInitialize()\n"); - - return STATUS_SUCCESS; -} - - -NTSTATUS +NTSTATUS NTAPI VfatxFormat (PUNICODE_STRING DriveRoot, - ULONG MediaFlag, + FMIFS_MEDIA_FLAG MediaFlag, + PUNICODE_STRING Label, BOOLEAN QuickFormat, + ULONG ClusterSize, PFMIFSCALLBACK Callback) { OBJECT_ATTRIBUTES ObjectAttributes; @@ -163,15 +156,6 @@ VfatxFormat (PUNICODE_STRING DriveRoot, } -NTSTATUS -VfatxCleanup(VOID) -{ - DPRINT("VfatxCleanup()\n"); - - return STATUS_SUCCESS; -} - - VOID VfatxUpdateProgress (PFORMAT_CONTEXT Context, ULONG Increment)