Example #1
0
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)
Example #2
0
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)
Example #3
0
 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
Example #4
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)
Example #5
0
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)
Example #6
0
 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)
Example #7
0
 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