Esempio n. 1
0
    def read(self):
        self.bitmap_blks = []
        bitmap_data = ""

        # get bitmap blocks from root block
        blocks = self.root_blk.bitmap_ptrs
        for blk in blocks:
            if blk == 0:
                break
            bm = BitmapBlock(self.blkdev, blk)
            bm.read()
            if not bm.valid:
                raise FSError(INVALID_BITMAP_BLOCK, block=bm)
            self.bitmap_blks.append(bm)
            bitmap_data += bm.get_bitmap_data()

        # now check extended bitmap blocks
        ext_blk = self.root_blk.bitmap_ext_blk
        while ext_blk != 0:
            bm_ext = BitmapExtBlock(self.blkdev, ext_blk)
            bm_ext.read()
            self.ext_blks.append(bm_ext)
            blocks = bm_ext.bitmap_ptrs
            for blk in blocks:
                if blk == 0:
                    break
                bm = BitmapBlock(self.blkdev, blk)
                bm.read()
                if not bm.valid:
                    raise FSError(INVALID_BITMAP_BLOCK, block=bm)
                bitmap_data += bm.get_bitmap_data()
                self.bitmap_blks.append(bm)
            ext_blk = bm_ext.bitmap_ext_blk

        # check bitmap data
        num_bm_blks = len(self.bitmap_blks)
        num_bytes = self.bitmap_blk_bytes * num_bm_blks
        if num_bytes != len(bitmap_data):
            raise FSError(BITMAP_SIZE_MISMATCH,
                          node=self,
                          extra="got=%d want=%d" %
                          (len(bitmap_data), num_bytes))
        if num_bm_blks != self.bitmap_num_blks:
            raise FSError(BITMAP_BLOCK_COUNT_MISMATCH,
                          node=self,
                          extra="got=%d want=%d" %
                          (self.bitmap_num_blks, num_bm_blks))

        # create a modyfiable bitmap
        self.bitmap_data = ctypes.create_string_buffer(bitmap_data)
        self.valid = True
Esempio n. 2
0
  def read(self):
    self.bitmap_blks = []
    bitmap_data = ""
    
    # get bitmap blocks from root block
    blocks = self.root_blk.bitmap_ptrs
    for blk in blocks:
      if blk == 0:
        break
      bm = BitmapBlock(self.blkdev, blk)
      bm.read()
      if not bm.valid:
        raise FSError(INVALID_BITMAP_BLOCK, block=bm)
      self.bitmap_blks.append(bm)
      bitmap_data += bm.get_bitmap_data()
      
    # now check extended bitmap blocks
    ext_blk = self.root_blk.bitmap_ext_blk
    while ext_blk != 0:
      bm_ext = BitmapExtBlock(self.blkdev, ext_blk)
      bm_ext.read()
      self.ext_blks.append(bm_ext)
      blocks = bm_ext.bitmap_ptrs
      for blk in blocks:
        if blk == 0:
          break
        bm = BitmapBlock(self.blkdev, blk)
        bm.read()
        if not bm.valid:
          raise FSError(INVALID_BITMAP_BLOCK, block=bm)
        bitmap_data += bm.get_bitmap_data()
        self.bitmap_blks.append(bm)
      ext_blk = bm_ext.bitmap_ext_blk

    # check bitmap data
    num_bm_blks = len(self.bitmap_blks)
    num_bytes = self.bitmap_blk_bytes * num_bm_blks
    if num_bytes != len(bitmap_data):
      raise FSError(BITMAP_SIZE_MISMATCH, node=self, extra="got=%d want=%d" % (len(bitmap_data), num_bytes))
    if num_bm_blks != self.bitmap_num_blks:
      raise FSError(BITMAP_BLOCK_COUNT_MISMATCH, node=self, extra="got=%d want=%d" % (self.bitmap_num_blks, num_bm_blks))

    # create a modyfiable bitmap
    self.bitmap_data = ctypes.create_string_buffer(bitmap_data)
    self.valid = True