# File lib/ole/storage/base.rb, line 541
      def resize_chain blocks, size
        new_num_blocks = (size / block_size.to_f).ceil
        old_num_blocks = blocks.length
        if new_num_blocks < old_num_blocks
          # de-allocate some of our old blocks. TODO maybe zero them out in the file???
          (new_num_blocks...old_num_blocks).each { |i| self[blocks[i]] = AVAIL }
          self[blocks[new_num_blocks-1]] = EOC if new_num_blocks > 0
          blocks.slice! new_num_blocks..-1
        elsif new_num_blocks > old_num_blocks
          # need some more blocks.
          last_block = blocks.last
          (new_num_blocks - old_num_blocks).times do
            block = free_block
            # connect the chain. handle corner case of blocks being [] initially
            self[last_block] = block if last_block
            blocks << block
            last_block = block
            self[last_block] = EOC
          end
        end
        # update ranges, and return that also now
        blocks
      end