mirror of
https://github.com/platomav/BIOSUtilities.git
synced 2025-06-02 00:08:20 -04:00

Added graceful exception hanlding during "main" flow Improved and cleaned 7-Zip and EFI compression logic Improved too aggressive extraction directory handling Fixed input name detection at VAIO Package Extractor Fixed Intel IBIOSI detection at Apple EFI Identifier
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
#!/usr/bin/env python3 -B
|
|
# coding=utf-8
|
|
|
|
"""
|
|
Fujitsu UPC Extract
|
|
Fujitsu UPC BIOS Extractor
|
|
Copyright (C) 2021-2024 Plato Mavropoulos
|
|
"""
|
|
|
|
import os
|
|
|
|
from biosutilities.common.compression import efi_decompress, is_efi_compressed
|
|
from biosutilities.common.paths import delete_file, make_dirs, is_file, path_name, path_suffixes
|
|
from biosutilities.common.templates import BIOSUtility
|
|
|
|
|
|
class FujitsuUpcExtract(BIOSUtility):
|
|
""" Fujitsu UPC BIOS Extractor """
|
|
|
|
TITLE: str = 'Fujitsu UPC BIOS Extractor'
|
|
|
|
def check_format(self) -> bool:
|
|
""" Check if input is Fujitsu UPC image """
|
|
is_upc: bool = False
|
|
|
|
if isinstance(self.input_object, str) and is_file(in_path=self.input_object):
|
|
is_upc = path_suffixes(self.input_object)[-1].upper() == '.UPC'
|
|
elif isinstance(self.input_object, (bytes, bytearray)):
|
|
is_upc = True
|
|
|
|
if is_upc:
|
|
is_upc = is_efi_compressed(in_object=self.input_object)
|
|
|
|
return is_upc
|
|
|
|
def parse_format(self) -> bool:
|
|
""" Parse & Extract Fujitsu UPC image """
|
|
|
|
make_dirs(in_path=self.extract_path)
|
|
|
|
if isinstance(self.input_object, str) and is_file(in_path=self.input_object):
|
|
input_name: str = path_name(in_path=self.input_object)
|
|
|
|
input_path: str = self.input_object
|
|
|
|
if input_name.upper().endswith('.UPC'):
|
|
input_name = input_name[:-4]
|
|
else:
|
|
input_name = 'Fujitsu_UPC_Image'
|
|
|
|
input_path = os.path.join(self.extract_path, f'{input_name}.UPC')
|
|
|
|
with open(input_path, 'wb') as input_path_object:
|
|
input_path_object.write(self.input_buffer)
|
|
|
|
output_path: str = os.path.join(self.extract_path, f'{input_name}.bin')
|
|
|
|
efi_status: bool = efi_decompress(in_path=input_path, out_path=output_path, padding=self.padding)
|
|
|
|
if input_path != self.input_object:
|
|
delete_file(in_path=input_path)
|
|
|
|
return efi_status
|