示例#1
0
 def open(self):
   # read boot block
   self.boot = BootBlock(self.blkdev)
   self.boot.read()
   # valid root block?
   if self.boot.valid:
     # get fs flags
     dos_type = self.boot.dos_type
     self.is_ffs = DosType.is_ffs(dos_type)
     self.is_intl = DosType.is_intl(dos_type)
     self.is_dircache = DosType.is_dircache(dos_type)
     # read root 
     self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
     self.root.read()
     if self.root.valid:
       self.name = self.root.name
       # build meta info
       self.meta_info = RootMetaInfo( self.root.create_ts, self.root.disk_ts, self.root.mod_ts )
       # create root dir
       self.root_dir = ADFSVolDir(self, self.root)
       self.root_dir.read()
       # create bitmap
       self.bitmap = ADFSBitmap(self.root)
       self.bitmap.read()
       self.valid = True
     else:
       raise FSError(INVALID_ROOT_BLOCK, block=self.root)
   else:
     raise FSError(INVALID_BOOT_BLOCK, block=self.boot)
示例#2
0
 def open(self):
     # read boot block
     self.boot = BootBlock(self.blkdev)
     self.boot.read()
     # valid root block?
     if self.boot.valid:
         # get fs flags
         dos_type = self.boot.dos_type
         self.is_ffs = DosType.is_ffs(dos_type)
         self.is_intl = DosType.is_intl(dos_type)
         self.is_dircache = DosType.is_dircache(dos_type)
         # read root
         self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
         self.root.read()
         if self.root.valid:
             self.name = FSString(self.root.name)
             # build meta info
             self.meta_info = RootMetaInfo(self.root.create_ts,
                                           self.root.disk_ts,
                                           self.root.mod_ts)
             # create root dir
             self.root_dir = ADFSVolDir(self, self.root)
             self.root_dir.read()
             # create bitmap
             self.bitmap = ADFSBitmap(self.root)
             self.bitmap.read()
             self.valid = True
         else:
             raise FSError(INVALID_ROOT_BLOCK, block=self.root)
     else:
         raise FSError(INVALID_BOOT_BLOCK, block=self.boot)
示例#3
0
 def create(self,
            name,
            meta_info=None,
            dos_type=None,
            boot_code=None,
            is_ffs=False,
            is_intl=False,
            is_dircache=False):
     # determine dos_type
     if dos_type == None:
         dos_type = DosType.DOS0
         if is_ffs:
             dos_type |= DosType.DOS_MASK_FFS
         if is_dircache:
             dos_type |= DosType.DOS_MASK_DIRCACHE
         elif is_intl:
             dos_type |= DosType.DOS_MASK_INTL
     # update flags
     self.is_ffs = DosType.is_ffs(dos_type)
     self.is_intl = DosType.is_intl(dos_type)
     self.is_dircache = DosType.is_dircache(dos_type)
     # convert and check volume name
     if not isinstance(name, FSString):
         raise ValueError("create's name must be a FSString")
     fn = FileName(name, is_intl=self.is_intl)
     if not fn.is_valid():
         raise FSError(INVALID_VOLUME_NAME, file_name=name, node=self)
     # create a boot block
     self.boot = BootBlock(self.blkdev)
     self.boot.create(dos_type=dos_type, boot_code=boot_code)
     self.boot.write()
     # create a root block
     self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
     if meta_info == None:
         meta_info = RootMetaInfo()
         meta_info.set_current_as_create_time()
         meta_info.set_current_as_mod_time()
         meta_info.set_current_as_disk_time()
     create_ts = meta_info.get_create_ts()
     disk_ts = meta_info.get_disk_ts()
     mod_ts = meta_info.get_mod_ts()
     self.meta_info = meta_info
     self.root.create(name.get_ami_str(), create_ts, disk_ts, mod_ts)
     self.name = name
     # create bitmap
     self.bitmap = ADFSBitmap(self.root)
     self.bitmap.create()
     self.bitmap.write()  # writes root block, too
     # create empty root dir
     self.root_dir = ADFSVolDir(self, self.root)
     self.root_dir.read()
     # all ok
     self.valid = True
示例#4
0
 def create(self, name, meta_info=None, dos_type=None, boot_code=None, is_ffs=False, is_intl=False, is_dircache=False, is_longname=False):
   # determine dos_type
   if dos_type == None:
     dos_type = DosType.DOS0
     if is_longname:
       dos_type = DosType.DOS6
     elif is_dircache:
       dos_type |= DosType.DOS_MASK_DIRCACHE
     elif is_intl:
       dos_type |= DosType.DOS_MASK_INTL
     if is_ffs:
       dos_type |= DosType.DOS_MASK_FFS
   # update flags
   self.is_ffs = DosType.is_ffs(dos_type)
   self.is_intl = DosType.is_intl(dos_type)
   self.is_dircache = DosType.is_dircache(dos_type)
   self.is_longname = DosType.is_longname(dos_type)
   # convert and check volume name
   if not isinstance(name, FSString):
     raise ValueError("create's name must be a FSString")
   fn = FileName(name, is_intl=self.is_intl, is_longname=False) # Volumes don't support long names
   if not fn.is_valid():
     raise FSError(INVALID_VOLUME_NAME, file_name=name, node=self)
   # create a boot block
   self.boot = BootBlock(self.blkdev)
   self.boot.create(dos_type=dos_type, boot_code=boot_code)
   self.boot.write()
   # create a root block
   self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
   if meta_info == None:
     meta_info = RootMetaInfo()
     meta_info.set_current_as_create_time()
     meta_info.set_current_as_mod_time()
     meta_info.set_current_as_disk_time()
   create_ts = meta_info.get_create_ts()
   disk_ts = meta_info.get_disk_ts()
   mod_ts = meta_info.get_mod_ts()
   self.meta_info = meta_info
   self.root.create(name.get_ami_str(), create_ts, disk_ts, mod_ts, fstype=dos_type)
   self.name = name
   # create bitmap
   self.bitmap = ADFSBitmap(self.root)
   self.bitmap.create()
   self.bitmap.write() # writes root block, too
   # create empty root dir
   self.root_dir = ADFSVolDir(self, self.root)
   self.root_dir.read()
   # all ok
   self.valid = True
示例#5
0
 def create(self, name, meta_info=None, dos_type=None, boot_code=None, is_ffs=False, is_intl=False, is_dircache=False):
   # determine dos_type
   if dos_type == None:
     dos_type = DosType.DOS0
     if is_ffs:
       dos_type |= DosType.DOS_MASK_FFS
     if is_dircache:
       dos_type |= DosType.DOS_MASK_DIRCACHE
     elif is_intl:
       dos_type |= DosType.DOS_MASK_INTL
   # create a boot block
   self.boot = BootBlock(self.blkdev, )
   self.boot.create(dos_type=dos_type, boot_code=boot_code)
   self.is_ffs = DosType.is_ffs(dos_type)
   self.is_intl = DosType.is_intl(dos_type)
   self.is_dircache = DosType.is_dircache(dos_type)
   self.boot.write()
   # create a root block
   self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
   if meta_info == None:
     meta_info = RootMetaInfo()
     meta_info.set_current_as_create_time()
     meta_info.set_current_as_mod_time()
     meta_info.set_current_as_disk_time()
   create_ts = meta_info.get_create_ts()
   disk_ts = meta_info.get_disk_ts()
   mod_ts = meta_info.get_mod_ts()
   self.meta_info = meta_info
   self.root.create(name, create_ts, disk_ts, mod_ts)
   self.name = name
   # create bitmap
   self.bitmap = ADFSBitmap(self.root)
   self.bitmap.create()
   self.bitmap.write() # writes root block, too
   # create empty root dir
   self.root_dir = ADFSVolDir(self, self.root)
   self.root_dir.read()
   # all ok
   self.valid = True
示例#6
0
 def get_list_str(self, indent=0, all=False, detail=False):
   a = ADFSDir.get_list_str(self, indent=indent, all=all, detail=detail)
   a += DosType.get_dos_type_str(self.volume.get_dos_type())
   return a