toaruos/util/update-extents.krk
2021-10-20 23:14:39 +09:00

36 lines
1.1 KiB
Plaintext

#!/usr/bin/env kuroko
import fileio
from util import ISO, FAT
let image = ISO('image.iso')
let fat = image.root.find('FAT.IMG')
let fatfs = FAT(image, fat.extent_start_lsb * image.sector_size)
def process(fatfile, path):
if fatfile.is_long():
return
if fatfile.readable_name() == '.':
return
if fatfile.readable_name() == '..':
return
if fatfile.is_dir():
for i in fatfile.to_dir().list():
process(i, path + fatfile.readable_name() + '/')
else:
let cdfile = image.get_file(path + fatfile.readable_name())
if not cdfile:
if fatfile.readable_name() != 'bootia32.efi' and fatfile.readable_name() != 'bootx64.efi':
print("Warning:", fatfile.readable_name(), "not found in ISO")
else:
cdfile.extent_start_lsb = fatfile.get_offset() // 2048
cdfile.extent_length_lsb = fatfile.filesize
cdfile.write_extents()
for i in fatfs.root.list():
process(i,'/')
with fileio.open('image.iso','wb') as f:
f.write(bytes(image.data))