mirror of
https://github.com/reactos/reactos.git
synced 2025-06-26 04:39:44 +00:00
[VFATLIB]
- Get rid of the hard-coded sector size as large sector (4KB) harddisks are already available. - When a partition is formatted, choose the FAT type according to the partition type. The size of the partition does not matter here as it is up to the caller to set the right partition type according to its size. svn path=/trunk/; revision=47765
This commit is contained in:
parent
0c8457631d
commit
9cf8c2c8da
5 changed files with 30 additions and 25 deletions
|
@ -62,12 +62,12 @@ Fat12WriteBootSector(IN HANDLE FileHandle,
|
|||
/* Allocate buffer for new bootsector */
|
||||
NewBootSector = (PUCHAR)RtlAllocateHeap(RtlGetProcessHeap (),
|
||||
0,
|
||||
SECTORSIZE);
|
||||
BootSector->BytesPerSector);
|
||||
if (NewBootSector == NULL)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
/* Zero the new bootsector */
|
||||
memset(NewBootSector, 0, SECTORSIZE);
|
||||
memset(NewBootSector, 0, BootSector->BytesPerSector);
|
||||
|
||||
/* Copy FAT16 BPB to new bootsector */
|
||||
memcpy((NewBootSector + 3),
|
||||
|
@ -82,7 +82,7 @@ Fat12WriteBootSector(IN HANDLE FileHandle,
|
|||
NULL,
|
||||
&IoStatusBlock,
|
||||
NewBootSector,
|
||||
SECTORSIZE,
|
||||
BootSector->BytesPerSector,
|
||||
&FileOffset,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
|
|
@ -62,12 +62,12 @@ Fat16WriteBootSector(IN HANDLE FileHandle,
|
|||
/* Allocate buffer for new bootsector */
|
||||
NewBootSector = (PUCHAR)RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
0,
|
||||
SECTORSIZE);
|
||||
BootSector->BytesPerSector);
|
||||
if (NewBootSector == NULL)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
/* Zero the new bootsector */
|
||||
memset(NewBootSector, 0, SECTORSIZE);
|
||||
memset(NewBootSector, 0, BootSector->BytesPerSector);
|
||||
|
||||
/* Copy FAT16 BPB to new bootsector */
|
||||
memcpy((NewBootSector + 3),
|
||||
|
@ -82,7 +82,7 @@ Fat16WriteBootSector(IN HANDLE FileHandle,
|
|||
NULL,
|
||||
&IoStatusBlock,
|
||||
NewBootSector,
|
||||
SECTORSIZE,
|
||||
BootSector->BytesPerSector,
|
||||
&FileOffset,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
|
|
@ -62,12 +62,12 @@ Fat32WriteBootSector(IN HANDLE FileHandle,
|
|||
/* Allocate buffer for new bootsector */
|
||||
NewBootSector = (PUCHAR)RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
0,
|
||||
SECTORSIZE);
|
||||
BootSector->BytesPerSector);
|
||||
if (NewBootSector == NULL)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
/* Zero the new bootsector */
|
||||
memset(NewBootSector, 0, SECTORSIZE);
|
||||
memset(NewBootSector, 0, BootSector->BytesPerSector);
|
||||
|
||||
/* Copy FAT32 BPB to new bootsector */
|
||||
memcpy((NewBootSector + 3),
|
||||
|
@ -82,7 +82,7 @@ Fat32WriteBootSector(IN HANDLE FileHandle,
|
|||
NULL,
|
||||
&IoStatusBlock,
|
||||
NewBootSector,
|
||||
SECTORSIZE,
|
||||
BootSector->BytesPerSector,
|
||||
&FileOffset,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
@ -97,14 +97,14 @@ Fat32WriteBootSector(IN HANDLE FileHandle,
|
|||
/* Write backup boot sector */
|
||||
if (BootSector->BootBackup != 0x0000)
|
||||
{
|
||||
FileOffset.QuadPart = (ULONGLONG)((ULONG) BootSector->BootBackup * SECTORSIZE);
|
||||
FileOffset.QuadPart = (ULONGLONG)((ULONG)BootSector->BootBackup * BootSector->BytesPerSector);
|
||||
Status = NtWriteFile(FileHandle,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&IoStatusBlock,
|
||||
NewBootSector,
|
||||
SECTORSIZE,
|
||||
BootSector->BytesPerSector,
|
||||
&FileOffset,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
|
|
@ -143,9 +143,9 @@ VfatFormat(IN PUNICODE_STRING DriveRoot,
|
|||
Callback (PROGRESS, 0, (PVOID)&Context.Percent);
|
||||
}
|
||||
|
||||
if (PartitionInfo.PartitionLength.QuadPart < (4200LL * 1024LL))
|
||||
if (PartitionInfo.PartitionType == PARTITION_FAT_12)
|
||||
{
|
||||
/* FAT12 (volume is smaller than 4.1MB) */
|
||||
/* FAT12 */
|
||||
Status = Fat12Format(FileHandle,
|
||||
&PartitionInfo,
|
||||
&DiskGeometry,
|
||||
|
@ -154,9 +154,11 @@ VfatFormat(IN PUNICODE_STRING DriveRoot,
|
|||
ClusterSize,
|
||||
&Context);
|
||||
}
|
||||
else if (PartitionInfo.PartitionLength.QuadPart < (512LL * 1024LL * 1024LL))
|
||||
else if (PartitionInfo.PartitionType == PARTITION_FAT_16 ||
|
||||
PartitionInfo.PartitionType == PARTITION_HUGE ||
|
||||
PartitionInfo.PartitionType == PARTITION_XINT13)
|
||||
{
|
||||
/* FAT16 (volume is smaller than 512MB) */
|
||||
/* FAT16 */
|
||||
Status = Fat16Format(FileHandle,
|
||||
&PartitionInfo,
|
||||
&DiskGeometry,
|
||||
|
@ -165,16 +167,21 @@ VfatFormat(IN PUNICODE_STRING DriveRoot,
|
|||
ClusterSize,
|
||||
&Context);
|
||||
}
|
||||
else if (PartitionInfo.PartitionType == PARTITION_FAT32 ||
|
||||
PartitionInfo.PartitionType == PARTITION_FAT32_XINT13)
|
||||
{
|
||||
/* FAT32 */
|
||||
Status = Fat32Format(FileHandle,
|
||||
&PartitionInfo,
|
||||
&DiskGeometry,
|
||||
Label,
|
||||
QuickFormat,
|
||||
ClusterSize,
|
||||
&Context);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* FAT32 (volume is 512MB or larger) */
|
||||
Status = Fat32Format(FileHandle,
|
||||
&PartitionInfo,
|
||||
&DiskGeometry,
|
||||
Label,
|
||||
QuickFormat,
|
||||
ClusterSize,
|
||||
&Context);
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
NtClose(FileHandle);
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
#include "check/file.h"
|
||||
#include "check/check.h"
|
||||
|
||||
#define SECTORSIZE 512
|
||||
|
||||
#include <pshpack1.h>
|
||||
typedef struct _FAT16_BOOT_SECTOR
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue