示例#1
0
  def blocks_create_new(self, free_blks, name, hash_chain_blk, parent_blk, meta_info):
    # assign block numbers
    fhb_num = free_blks[0]
    # ... for ext
    self.ext_blk_nums = []
    for i in xrange(self.num_ext_blks):
      self.ext_blk_nums.append(free_blks[1+i])
    # ... for data
    off = 1 + self.num_ext_blks
    self.data_blk_nums = []
    for i in xrange(self.num_data_blks):
      self.data_blk_nums.append(free_blks[off])
      off += 1
    
    ppb = self.volume.blkdev.block_longs - 56 # data pointer per block
    
    # create file header block
    fhb = FileHeaderBlock(self.blkdev, fhb_num)
    byte_size = len(self.data)
    if self.num_data_blks > ppb:
      hdr_blks = self.data_blk_nums[0:ppb]
      hdr_ext = self.ext_blk_nums[0]
    else:
      hdr_blks = self.data_blk_nums
      hdr_ext = 0
      
    fhb.create(parent_blk, name.get_ami_str(), hdr_blks, hdr_ext, byte_size, meta_info.get_protect(), meta_info.get_comment_ami_str(), meta_info.get_mod_ts(), hash_chain_blk)
    fhb.write() 
    self.set_block(fhb)
    
    # create file list (=ext) blocks
    ext_off = ppb
    for i in xrange(self.num_ext_blks):
      flb = FileListBlock(self.blkdev, self.ext_blk_nums[i])
      if i == self.num_ext_blks - 1:
        ext_blk = 0
        blks = self.data_blk_nums[ext_off:]
      else:
        ext_blk = self.ext_blk_nums[i+1]
        blks = self.data_blk_nums[ext_off:ext_off+ppb]
      flb.create(fhb_num, blks, ext_blk)
      flb.write()
      self.ext_blks.append(flb)
      ext_off += ppb
    
    # write data blocks
    self.write()

    self.valid = True    
    return fhb_num