Skip to content

Commit c7a5b33

Browse files
committed
Fix: include kernel size in FAT size calculation
1 parent fdf9d4b commit c7a5b33

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/lib.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ fn create_fat_filesystem(
9898

9999
// retrieve size of `.efi` file and round it up
100100
let efi_size = fs::metadata(&bootloader_efi_file).unwrap().len();
101-
// size of a megabyte
102-
// round it to next megabyte
103-
let efi_size_rounded = ((efi_size - 1) / MB + 1) * MB;
101+
let kernel_size = fs::metadata(&kernel_binary)
102+
.context("failed to read metadata of kernel binary")?
103+
.len();
104104

105105
// create new filesystem image file at the given path and set its length
106106
let fat_file = fs::OpenOptions::new()
@@ -110,7 +110,9 @@ fn create_fat_filesystem(
110110
.truncate(true)
111111
.open(&out_fat_path)
112112
.unwrap();
113-
fat_file.set_len(efi_size_rounded).unwrap();
113+
let fat_size = efi_size + kernel_size;
114+
let fat_size_padded_and_rounded = ((fat_size + 1024 * 64 - 1) / MB + 1) * MB;
115+
fat_file.set_len(fat_size_padded_and_rounded).unwrap();
114116

115117
// create new FAT file system and open it
116118
let label = {
@@ -146,7 +148,8 @@ fn create_fat_filesystem(
146148
// copy kernel to FAT filesystem
147149
let mut kernel_file = root_dir.create_file("kernel-x86_64")?;
148150
kernel_file.truncate()?;
149-
io::copy(&mut fs::File::open(&kernel_binary)?, &mut kernel_file)?;
151+
io::copy(&mut fs::File::open(&kernel_binary)?, &mut kernel_file)
152+
.context("failed to copy kernel to UEFI FAT filesystem")?;
150153

151154
Ok(())
152155
}

0 commit comments

Comments
 (0)