def make_fsstr(s): if sys.version_info[0] == 3: if isinstance(s, str): return FSString(s) # fetch default encoding (if available) encoding = sys.stdin.encoding if encoding is None: # assume win default encoding if os.platform == "win32": encoding = "cp1252" else: encoding = "utf-8" u = s.decode(encoding) return FSString(u)
def make_fsstr(s): if sys.version_info[0] == 3: if isinstance(s, str): return FSString(s) # fetch default encoding (if available) encoding = sys.stdin.encoding if encoding is None: encoding = "utf-8" try: if os.platform == "win32": # set win default encoding encoding = "cp1252" except AttributeError: pass u = s.decode(encoding) return FSString(u)
def handle_vol(self, vol): n = len(self.opts) if n != 1: print("Usage: relabel <new_name>") return 1 name = self.opts[0] node = vol.relabel(FSString(name)) return 0
def get_drv_name(self, empty=False): if 'name' in self.popts: drv_name = self.popts['name'] elif empty: return None else: drv_name = "%s%d" % (self.args.drive_prefix, self.rdisk.get_num_partitions()) return FSString(drv_name)
def make_fsstr(s): # fetch default encoding (if available) encoding = sys.stdin.encoding if encoding is None: # assume win default encoding if os.platform == "win32": encoding = "cp1252" else: encoding = "utf-8" u = s.decode(encoding) return FSString(u)
def __init__(self, disk_vendor="", disk_product="", disk_revision="", ctrl_vendor="", ctrl_product="", ctrl_revision=""): self.disk_vendor = FSString(disk_vendor) self.disk_product = FSString(disk_product) self.disk_revision = FSString(disk_revision) self.ctrl_vendor = FSString(ctrl_vendor) self.ctrl_product = FSString(ctrl_product) self.ctrl_revision = FSString(ctrl_revision)
def read_block(self, blk_num, is_bm=False, is_bm_ext=False): """read block from device, decode it, and return block info instance""" try: # read block from device if is_bm: blk = BitmapBlock(self.blkdev, blk_num) elif is_bm_ext: blk = BitmapExtBlock(self.blkdev, blk_num) else: blk = Block(self.blkdev, blk_num) blk.read() data = blk.data # create block info bi = BlockInfo(blk_num) # --- classify block --- if blk.valid: # block is valid AmigaDOS bi.blk_status = self.BS_VALID # --- bitmap block --- if is_bm: bi.blk_type = self.BT_BITMAP bi.blk_status = self.BS_TYPE bi.bitmap = blk.get_bitmap_data() # --- bitmap ext block --- elif is_bm_ext: bi.blk_type = self.BT_BITMAP_EXT bi.blk_status = self.BS_TYPE bi.bitmap_ptrs = blk.bitmap_ptrs bi.next_blk = blk.bitmap_ext_blk # --- root block --- elif blk.is_root_block(): bi.blk_type = self.BT_ROOT bi.blk_status = self.BS_TYPE root = RootBlock(self.blkdev, blk_num) root.set(data) bi.name = FSString(root.name) bi.hash_table = root.hash_table bi.parent_blk = 0 self.log.msg(Log.DEBUG, "Found Root: '%s'" % bi.name, blk_num) # chech hash size nht = len(root.hash_table) if root.hash_size != nht: self.log.msg(Log.ERROR, "Root block hash table size mismatch", blk_num) eht = self.blkdev.block_longs - 56 if nht != eht: self.log.msg(Log.WARN, "Root block does not have normal hash size: %d != %d" % (nht, eht), blk_num) # --- user dir block --- elif blk.is_user_dir_block(): bi.blk_type = self.BT_DIR bi.blk_status = self.BS_TYPE user = UserDirBlock(self.blkdev, blk_num) user.set(data) bi.name = FSString(user.name) bi.parent_blk = user.parent bi.next_blk = user.hash_chain bi.hash_table = user.hash_table bi.own_key = user.own_key self.log.msg(Log.DEBUG, "Found Dir : '%s'" % bi.name, blk_num) # --- filter header block --- elif blk.is_file_header_block(): bi.blk_type = self.BT_FILE_HDR bi.blk_status = self.BS_TYPE fh = FileHeaderBlock(self.blkdev, blk_num) fh.set(data) bi.name = FSString(fh.name) bi.parent_blk = fh.parent bi.next_blk = fh.hash_chain bi.own_key = fh.own_key bi.byte_size = fh.byte_size bi.data_blocks = fh.data_blocks bi.extension = fh.extension self.log.msg(Log.DEBUG, "Found File: '%s'" % bi.name, blk_num) # --- file list block --- elif blk.is_file_list_block(): bi.blk_type = self.BT_FILE_LIST fl = FileListBlock(self.blkdev, blk_num) fl.set(data) bi.blk_status = self.BS_TYPE bi.ext_blk = fl.extension bi.blk_list = fl.data_blocks bi.own_key = fl.own_key bi.data_blocks = fl.data_blocks bi.extension = fl.extension bi.parent_blk = fl.parent # --- file data block (OFS) --- elif blk.is_file_data_block(): bi.blk_type = self.BT_FILE_DATA bi.blk_status = self.BS_TYPE fd = FileDataBlock(self.blkdev, blk_num) fd.set(data) bi.data_size = fd.data_size bi.hdr_key = fd.hdr_key bi.seq_num = fd.seq_num except IOError,e: self.log.msg(Log.ERROR, "Can't read block", blk_num) bi = BlockInfo(blk_num) bi.blk_status = BS_READ_ERROR