mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-27 13:11:46 +03:00
mkfs.fat: Fill in the last known free cluster count hint
This allows generated FAT32 file systems to pass fsck.fat without tripping any warnings.
This commit is contained in:
parent
e91f60e0f5
commit
012f2fd712
Notes:
sideshowbarker
2024-07-17 11:34:34 +09:00
Author: https://github.com/implicitfield Commit: https://github.com/SerenityOS/serenity/commit/012f2fd712 Pull-request: https://github.com/SerenityOS/serenity/pull/23356 Reviewed-by: https://github.com/ADKaster ✅
@ -470,13 +470,17 @@ static Kernel::DOS7BIOSParameterBlock generate_dos_7_bios_parameter_block(Kernel
|
||||
return boot_record_fat32;
|
||||
}
|
||||
|
||||
static Kernel::FAT32FSInfo generate_fat32_fs_info(Kernel::DOS7BIOSParameterBlock const& boot_record_fat32)
|
||||
static Kernel::FAT32FSInfo generate_fat32_fs_info(Kernel::DOS3BIOSParameterBlock const& boot_record, Kernel::DOS7BIOSParameterBlock const& boot_record_fat32)
|
||||
{
|
||||
Kernel::FAT32FSInfo fs_info {};
|
||||
fs_info.lead_signature = 0x41615252;
|
||||
__builtin_memset(&fs_info.unused1[0], 0, 480);
|
||||
fs_info.struct_signature = 0x61417272;
|
||||
fs_info.last_known_free_cluster_count = 0xFFFFFFFF; // Signify that the amount of free clusters is unknown.
|
||||
{
|
||||
off_t const fat_sectors = boot_record_fat32.sectors_per_fat_32bit * boot_record.fat_count;
|
||||
off_t const data_sector_count = boot_record.sector_count_32bit - boot_record.reserved_sector_count - fat_sectors;
|
||||
fs_info.last_known_free_cluster_count = data_sector_count / boot_record.sectors_per_cluster - 1;
|
||||
}
|
||||
fs_info.next_free_cluster_hint = boot_record_fat32.root_directory_cluster + 1;
|
||||
__builtin_memset(&fs_info.unused2[0], 0, 12);
|
||||
fs_info.trailing_signature = 0xAA550000;
|
||||
@ -525,7 +529,7 @@ static ErrorOr<void> format_fat32(Core::File& file, u64 file_size, u32 volume_id
|
||||
{
|
||||
auto boot_record = TRY(generate_dos_3_bios_parameter_block(file_size, FATType::FAT32));
|
||||
auto boot_record_fat32 = generate_dos_7_bios_parameter_block(boot_record, volume_id);
|
||||
auto fs_info = generate_fat32_fs_info(boot_record_fat32);
|
||||
auto fs_info = generate_fat32_fs_info(boot_record, boot_record_fat32);
|
||||
s_bootcode[s_message_offset_offset] = 0x77;
|
||||
|
||||
TRY(wipe_file(file, file_size));
|
||||
|
Loading…
Reference in New Issue
Block a user