Esempio n. 1
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
Esempio 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, 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
Esempio n. 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
   # 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
Esempio n. 4
0
 def update_disk_time(self):
   mi = RootMetaInfo()
   mi.set_current_as_disk_time()
   self.change_meta_info(mi)
Esempio n. 5
0
 def update_disk_time(self):
     mi = RootMetaInfo()
     mi.set_current_as_disk_time()
     self.change_meta_info(mi)