#!/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_read, 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_read(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_read(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