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