Exemplo n.º 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 = 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)
Exemplo n.º 2
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
Exemplo n.º 3
0
 def create(self,
            name,
            create_time=None,
            dos_type=BootBlock.DOS0,
            boot_code=None):
     # create a boot block
     self.boot = BootBlock(self.blkdev)
     self.boot.create()
     self.boot.write()
     # create a root block
     self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
     self.root.create(name, create_time)
     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
Exemplo n.º 4
0
 def open(self):
     # read boot block
     self.boot = BootBlock(self.blkdev)
     self.boot.read()
     # valid root block?
     if self.boot.valid:
         self.is_ffs = self.boot.dos_type > BootBlock.DOS0
         # read root
         self.root = RootBlock(self.blkdev, self.boot.calc_root_blk)
         self.root.read()
         if self.root.valid:
             self.name = self.root.name
             # 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)